查看这个类的定义:
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)的,但可以访问私有(private)变量(publicMethod
)不能。它也在原型(prototype)上共享,而 publicPrivilegedMethodOnInstance
则不然。
像这样定义publicPrivilegedMethodOnPrototype
有什么缺点吗?我猜想 ECMAScript 5 是一个要求,并且每次实例化 MyClass 时都会重新定义该方法。
最佳答案
这是一个非常糟糕的主意。
因此,您创建了许多对象,但当您将属性分配给所有对象的原型(prototype)时,在某些时候,甚至不打算访问某些值的函数也会这样做... 这非常好奇数。
给定的原型(prototype)函数旨在使用 this
访问拥有原型(prototype)的对象的属性:
function X() {
this.text = "hello world";
}
X.prototype.doStuff() {
console.log(this.text);
};
因此,请避免这种反模式。这个不成立。我的建议是,您需要解决 JavaScript 中缺少访问修饰符的问题,而不是盲目寻找解决方法。
关于javascript - 将方法放在 Object.getPrototypeOf(this) 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42320902/