将方法放在 Object.getPrototypeOf(this) 上
Putting methods on Object.getPrototypeOf(this)
看到这个class定义:
function MyClass (property) {
// Private
var privateVariable;
var privateMethod = function () {};
// Public
this.publicProperty = property;
this.publicPrivilegedMethodOnInstance = function () {};
Object.getPrototypeOf(this).publicPrivilegedMethodOnPrototype = function () {};
}
MyClass.prototype.publicMethod = function () {};
var myMyClass = new MyClass('foo');
方法 publicPrivilegedMethodOnPrototype
是 public,但可以访问私有变量(publicMethod
)不能。它也在原型上共享,publicPrivilegedMethodOnInstance
不是。
这样定义 publicPrivilegedMethodOnPrototype
有什么缺点吗?我想 ECMAScript 5 是一项要求,并且每次实例化 MyClass 时都会重新定义该方法。
这是一个非常糟糕的主意。
所以您创建了许多对象,但是当您将 属性 分配给所有对象的原型时,在某些时候,即使是不打算访问某些值的函数也会这样做...... 这很奇怪。
给定的原型函数旨在使用 this
:
从拥有原型的对象访问属性
function X() {
this.text = "hello world";
}
X.prototype.doStuff() {
console.log(this.text);
};
因此,避免anti-pattern。这没有道理。我的建议是您需要处理 JavaScript 中缺少访问修饰符的问题,而不是盲目地寻找解决方法。
看到这个class定义:
function MyClass (property) {
// Private
var privateVariable;
var privateMethod = function () {};
// Public
this.publicProperty = property;
this.publicPrivilegedMethodOnInstance = function () {};
Object.getPrototypeOf(this).publicPrivilegedMethodOnPrototype = function () {};
}
MyClass.prototype.publicMethod = function () {};
var myMyClass = new MyClass('foo');
方法 publicPrivilegedMethodOnPrototype
是 public,但可以访问私有变量(publicMethod
)不能。它也在原型上共享,publicPrivilegedMethodOnInstance
不是。
这样定义 publicPrivilegedMethodOnPrototype
有什么缺点吗?我想 ECMAScript 5 是一项要求,并且每次实例化 MyClass 时都会重新定义该方法。
这是一个非常糟糕的主意。
所以您创建了许多对象,但是当您将 属性 分配给所有对象的原型时,在某些时候,即使是不打算访问某些值的函数也会这样做...... 这很奇怪。
给定的原型函数旨在使用 this
:
function X() {
this.text = "hello world";
}
X.prototype.doStuff() {
console.log(this.text);
};
因此,避免anti-pattern。这没有道理。我的建议是您需要处理 JavaScript 中缺少访问修饰符的问题,而不是盲目地寻找解决方法。