我正在评估 selfish想知道如何声明私有(private)方法/字段?
最佳答案
执行私有(private)函数的常用方法是使用各种“方法”关闭的函数,例如拿起他们的 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
对于私有(private)字段,通常的方法是在构造函数中构建任何需要真正私有(private)字段的东西,以便它们在构造函数调用中关闭(私有(private))变量,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
中检索它。例如,它是真正私有(private)的(除了我们明确允许 bark
返回它之外)。
如果你深入了解它的技术细节,我博客中的这些文章可能(或可能没有)有用,因为当你进入私有(private)函数等时,你通常必须开始管理this
:
如果你想评估另一件事,这里是我的 Lineage
project ,这同样是纯原型(prototype)继承,但可以轻松访问父对象属性、函数等,并且语法积极鼓励对此类事物使用私有(private)范围。
关于javascript - 私有(private)方法和字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9908971/