将方法放在Object.getPrototypeOf(this)上

时间:2017-02-18 21:29:46

标签: javascript ecmascript-5

请参阅此课程定义:

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实例化时都会重新定义该方法。

1 个答案:

答案 0 :(得分:3)

这是一个非常糟糕的主意。

所以你创建了很多对象,但是当你将属性分配给所有对象的原型时,在某些时候,即使是不能访问某些值的函数也会这样做...... 这很奇怪

给定的原型函数用于使用this从原型对象访问属性:

function X() {
   this.text = "hello world";
}
X.prototype.doStuff() {
   console.log(this.text);
};

因此,避免反模式。这没有道理。我的建议是你需要在JavaScript中处理缺少访问修饰符的问题,而不是盲目地寻找解决方法。

相关问题