【问题标题】:What is the difference between these two ways of changing a functions prototype in JavaScript? [duplicate]这两种在 JavaScript 中更改函数原型的方法有什么区别? [复制]
【发布时间】:2016-06-26 08:56:25
【问题描述】:

在以下代码中,一个构造函数、一个对象实例和两个更改函数原型的示例。这两种方法有什么区别?据我所知,第二种方法将更新对象实例,即使它是在声明该实例之后,而另一种则不会。这是唯一的区别吗?

function Foo(name, color) {
  this.name = name;
  this.color = color;
}

var bar = new Foo('name', 'color');

第一种方法:

Foo.prototype = {age: 6};

第二种方法:

Foo.prototype.age = 4;`

【问题讨论】:

    标签: javascript


    【解决方案1】:
    Foo.prototype = {age: 6};
    

    第一种方法将覆盖构造函数和____proto____链接,如果您使用继承不是一个好方法,因为您将破坏原始链接和原型链

    更好用

    Foo.prototype.age = 4;`
    

    通过这种方式,您只需添加一个属性,所有原型链都会原封不动地重新发送

    【讨论】:

    • 你会不会只使用Foo.prototype = {age: 6};来专门覆盖继承链?
    • 如果你有简单的函数,比如说函数 Person(){} 你可以做 Foo.prototype = {age: 6}; ,它会工作得很好,只需添加构造函数
    • 通常如果看到库,他们基本上使用 Foo.protytype.someFunction = function (){} 并且不为原型分配新对象
    猜你喜欢
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多