我使用哪种JavaScript模式给我:
我尝试从原型公共方法调用私有方法时,我发现其他答案似乎返回undefined。
答案 0 :(得分:0)
事实上,您无法从原型中访问私有内容。
原型通过将对象绑定为所有方法的上下文来工作,因此您可以使用this
关键字来访问它。
在面向对象的编程中,你称之为private的是在编译时解决的问题,暗示你试图访问的数据不应该从类外部读取。 但在运行时,这些数据将以与其他属性相同的方式存储。
要让方法访问私有字段,您可以直接在实例上创建方法而不是在原型上创建方法以允许它访问私有范围。 这称为特权方法。 查看Douglas Crockford的this article。
var ClassExample = function () {
var privateProperty = 42
this.publicProperty = 'Hello'
var privateMethod = function () {
return privateProperty
}
this.privilegedMethod = function () {
return privateProperty
}
}
ClassExample.prototype.publicMethod = function() {
return this.publicProperty
}
诸如Typescript之类的语言,添加类和键入+隐私设置将私有字段存储在公共字段旁边。
class ClassExample {
private privateProperty
public publicProperty
constructor () {
this.privateProperty = 42
this.publicProperty = 'Hello'
}
method () {
return this.privateProperty
}
}
将在
中编译var ClassExample = (function () {
function ClassExample() {
this.privateProperty = 42;
this.publicProperty = 'Hello';
}
ClassExample.prototype.method = function () {
return this.privateProperty;
};
return ClassExample;
})();