daG*_*vis 1 javascript oop code-reuse coding-style
当我编写代码时,我会尝试将所有内容划分为函数(方法,如果您愿意).函数X做东西X,Y做Tuff Y而不是方法X做东西X,Y和Z!这给了我更多可重用的代码.我喜欢.:)
让我们来看看这段代码:
var user = {
users: [],
userCount: 0,
addUser: function(user) {
(this.users).push(user);
},
incrementCount: function() {
++this.userCount;
}
}
var user = { // 2nd example.
users: [],
userCount: 0,
addUser: function(user) {
(this.users).push(user);
++this.userCount;
}
}
Run Code Online (Sandbox Code Playgroud)
(它是用JavaScript编写的,但这里的语言不是必需的.)
在我看来,第二个例子将更容易和更安全地使用,比方说,API用户.忘记打电话很容易user.incrementCount().你怎么看?第二个例子自动完成.
那么如何找到平衡点呢?关于在函数内调用函数的任何最佳实践?
感谢您阅读本文.
编辑:
我刚才想到了这个:
var user = {
users: [],
userCount: 0,
addUser: function(user) {
(this.users).push(user);
this.incrementCount();
},
incrementCount: function() {
++this.userCount;
}
}
Run Code Online (Sandbox Code Playgroud)
它在JS中有点不同,因为在使用对象文字符号时没有办法使函数真正私有,但......
这就是您希望对象向其消费者公开的API.您是否希望API的使用者能够与添加用户分开增加计数?如果是这样:
{ addUser: /* snip */, incrementCount: /* snip */ }
Run Code Online (Sandbox Code Playgroud)
除此以外:
{ addUser: /* snip */, _incrementCount: /* snip */ }
// or just
{ addUser: /* snip */ }
Run Code Online (Sandbox Code Playgroud)
在这种特殊情况下,我强烈建议不要存储任何单独的计数,因为users数组已经为你做了.
var user = {
_users: [],
addUser: function(user) {
this._users.push(user);
},
getUserCount: function () {
return this._users.length;
}
// and if you need to expose the users array directly,
, getUsers: function () {
return this._users;
}
}
Run Code Online (Sandbox Code Playgroud)