在原型上定义方法

时间:2014-01-15 12:01:21

标签: javascript object constructor prototype

在原型上单独定义方法与通过对象定义方法有什么区别?

示例:

function Example() {
  this.Test();
}

Example.prototype.Test = function() {
  alert("Example");
};

而不是:

function Example() {
  this.Test();
}

Example.prototype = {
  Test: function() {
    alert("Example");
  }
};

1 个答案:

答案 0 :(得分:1)

添加原型和替换之间的区别。

唯一真正有可能产生影响的地方就是这种情况,这种情况相对较少(但是,我避免因为它而更换原型):

var f = new Foo();

function Foo() {
}
Foo.prototype = {
    test: function() { }
};

f.test(); // Fails!

Live Copy | Live Source

失败是因为f对象是使用Foo原始原型对象创建的,但随后 您将原型对象替换为一个新的。 f仍然使用旧版本,其中没有test属性。

这有效:

var f = new Foo();

function Foo() {
}
Foo.prototype.test = test: function() { };

f.test(); // Works

...因为你只是添加f已经用作原型的对象。 Live Copy | Live Source

如果之后您已用新对象替换f,则不会创建Foo.prototype,它实际上没有任何显着差异。