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

标签 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是公共(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/

相关文章:

javascript - 如何在 IE11 上加载也适用于常青浏览器的 Polymer 元素?

javascript - 排序数组和 indexOf() 运行时

javascript - javascript对象的属性名设置保留字需要加引号吗?

javascript - 使用 pouchdb 进行多次复制的最佳实践?

javascript - 为什么要把 javascript 放在 asp.net 中?

javascript - 如何在 Express/Node.js 中反序列化 JSON 数据

javascript - 防止用户在表单字段中输入 < 或 >

javascript - 如何使用javascript逐字反转字符串中的单词?

javascript - 我的井字游戏 (jquery) 无法正常运行。丢失的零件无法正常工作

javascript - 如果我们有 2 个具有相同名称的函数声明,将调用哪个 javascript 函数以及如何调用?