javascript - 在原型(prototype)上定义方法

标签 javascript object constructor prototype

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

示例:

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

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

而不是:

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

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

最佳答案

这是添加原型(prototype)和替换原型(prototype)之间的区别。

唯一真正可能产生影响的地方是在这种情况下,这种情况相对罕见(但我因此避免更换原型(prototype)):

var f = new Foo();

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

f.test(); // Fails!

Live Copy | Live Source

失败是因为 f 对象是使用 Foo原始原型(prototype)对象创建的,但是后来您用一个新的原型(prototype)对象替换该原型(prototype)对象。 f 仍然使用旧的,它没有 test 属性。

这有效:

var f = new Foo();

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

f.test(); // Works

...因为您只是添加到 f 已用作其原型(prototype)的对象。 Live Copy | Live Source

假设 f 在您用新对象替换 Foo.prototype 之前之后才创建,它确实不会使任何显着差异。

关于javascript - 在原型(prototype)上定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21136905/

相关文章:

Java - 创建一个扩展列表的对象

javascript - 我不知道这个表格 "action"是什么意思

javascript - 我不明白为什么我的代码没有获取输入框的值并创建一个新对象

javascript - 对象在一个参数内传递多个参数

javascript - 从包含键路径的字符串中获取 json 值

c++ - 没有默认构造函数的对象数组初始化

javascript - 使用一个javascript脚本动态修改另一个脚本

javascript - 将阿拉伯语或希伯来语文本与拉丁语混合时出现括号问题

javascript - 使用一个正则表达式组匹配每个 JSON(字符串化)键和值

php - PDO 使用 PDO::FETCH_PROPS_LATE 和 __construct() 调用?