我应该将类方法移动到原型吗?

时间:2012-07-31 18:45:26

标签: javascript performance prototype

我有课

function Foo(a) {
  this.a = a;
  this.bar = function () {
    console.log(this.a);
  };
  this.buz = function () {
    this.a();
    console.log('bzz');
  };
}

我将有很多这个类的实例。我应该将方法移到原型吗?

function Foo(a) {
  this.a = a;
}
Foo.prototype = {
  bar: function () {
    console.log(this.a);
  },
  buz: function () {
    this.a();
    console.log('bzz');
  }
}

3 个答案:

答案 0 :(得分:6)

是。这将节省内存,因为每次实例化类时,每个方法都将shared而不是重新创建。

构造函数中的方法被认为是privileged methods,因为它们可以在构造函数内访问private variables,并且只应在需要访问私有变量时使用。

Crockford on privileged methods

答案 1 :(得分:1)

放置类方法是一个保存内存的好主意。原型中只有一个方法实例,而不是每个对象中的许多实例。

答案 2 :(得分:1)

在JS中构造函数内部定义方法的唯一原因是创建“Privileged”方法。

我们的想法是创建一个公开可用的方法,但可以访问私有实例变量。