请参阅此课程定义:
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
是公共的,但可以访问私有变量(publicMethod
}不能访问。它也在原型上共享,publicPrivilegedMethodOnInstance
不是。
定义publicPrivilegedMethodOnPrototype
这样的任何缺点?我想ECMAScript 5是一个要求,并且每次MyClass实例化时都会重新定义该方法。
答案 0 :(得分:3)
这是一个非常糟糕的主意。
所以你创建了很多对象,但是当你将属性分配给所有对象的原型时,在某些时候,即使是不能访问某些值的函数也会这样做...... 这很奇怪。
给定的原型函数用于使用this
从原型对象访问属性:
function X() {
this.text = "hello world";
}
X.prototype.doStuff() {
console.log(this.text);
};
因此,避免反模式。这没有道理。我的建议是你需要在JavaScript中处理缺少访问修饰符的问题,而不是盲目地寻找解决方法。