【问题标题】:Should I declare javascript object methods in an object prototype? [duplicate]我应该在对象原型中声明 javascript 对象方法吗? [复制]
【发布时间】:2026-01-23 17:15:01
【问题描述】:

我读过的所有内容似乎都倾向于在原型声明中声明对象构造函数的方法,而不是将方法直接放入初始构造函数中。

function MyClass(name){
  this.name = name;
}

MyClass.prototype.callMethod = function(){ 
  console.log(this.name);
  };

这会被推荐吗?如果是这样,将方法放在初始构造函数中有什么缺点。

function MyClass(name){
  this.name = name;
  this.callMethod = function(){
    console.log(this.name);
    };
}

我假设这样一个简单的情况,无论哪种方式都无关紧要,但是对于较大的对象,在两种情况下声明方法的含义是什么?

【问题讨论】:

    标签: javascript methods constructor prototypal-inheritance


    【解决方案1】:

    来自Effective Javascript,第 34 条:在原型上存储方法:

    在原型上存储方法使它们可用于所有实例 不需要实现它们的函数的多个副本 或每个实例对象的额外属性。

    • 在实例对象上存储方法会创建多个副本 函数,每个实例对象一个。
    • 首选存储方法 原型超过将它们存储在实例对象上。

    【讨论】:

    • 谢谢!这是一个比我预期的要简单得多的答案,但现在这对我来说非常有意义。我现在可能不得不学习 Effective Javascript。