我正在评估selfish,我想知道如何声明私有方法/字段?
答案 0 :(得分:4)
执行私有功能的常用方法是使用各种“方法”关闭的功能,例如:拿起他们的Dog
例子,改变这个:
// The basic Dog example
var Dog = Base.extend({
bark: function() {
return 'Ruff! Ruff!'
}
});
要
// Adding a private function
var Dog = Base.extend((function(){
function trulyPrivate() {
console.log(this.bark());
}
return {
bark: function() {
return 'Ruff! Ruff!'
},
logBark: function() {
trulyPrivate.call(this);
}
};
})());
用法:
new Dog().logBark(); // logs "Ruff! Ruff!" using the truly private function behind the scenes
私有字段,通常的方法是在构造函数中构建需要真正私有字段的任何东西,以便它们在构造函数的调用中关闭(私有)变量,a'la Crockford's pattern:
function Foo(arg) {
var trulyPrivateData = arg;
this.logIt = function() {
console.log(trulyPrivateData);
};
}
用法:
var f = new Foo(42);
f.logIt(); // logs 42 even though there's no way, externally, to get that value from `f`
... selfish取消了实际的构造函数,但initialize
函数应该起到同样的作用:
var Dog = Base.extend({
initialize: function(arg) {
var woof = arg || 'Ruff! Ruff!';
this.bark = function() {
return woof;
};
}
});
现在,您无法设置woof
(除了在施工时,因为我们是故意这样做的),您只能从bark
检索它。例如,它是真正私密的(除了我们明确允许bark
返回它之外)。
如果您了解这方面的技术细节,我博客上的这些文章可能(或可能不)有用,因为当您进入私人职能部门时,您通常必须开始管理this
:< / p>
如果你想要另一个东西来评估,那就是我的Lineage
project,它同样是纯粹的原型继承,但是可以轻松访问父对象属性,函数等,以及一种主动鼓励私有范围的语法有点像。