【问题标题】:Difference between two prototype setting code in javascriptjavascript中两个原型设置代码之间的区别
【发布时间】:2015-08-28 11:20:45
【问题描述】:

有两段 javascript 代码示例。
第一个代码是:

var child1 = new Parent1();
child1.prototype = Object.create(Parent1);

第二个代码是:

var child2 = new Parent2();
child2.prototype = Object.create(Parent2.prototype);

那你能告诉我,它们之间有什么区别吗?

【问题讨论】:

    标签: javascript oop prototype


    【解决方案1】:

    首先 - .prototype - 是构造函数(例如函数)而不是对象的属性。这意味着,使用您的构造函数创建的所有对象都将constructor prototype property 作为prototype :)

    要设置创建对象的原型,您可以使用__proto__ 属性或Object.setPrototypeOf 方法,但请注意,这两者都是新的 ES2015 标准的一部分,并非所有浏览器都完全支持。

    修改后的代码如下所示

    var child1 = new Parent1();
    Object.setPrototypeOf(child1, Object.create(Parent1));
    //vs
    var child2 = new Parent2();
    Object.setPrototypeOf(child2, Object.create(Parent2.prototype));
    

    区别在于第一种情况是您将Function object 设置为原型,这有点没有意义,因为它只包含默认的函数对象属性。在第二个中,您将构造函数的原型设置为构造对象的原型,这也没有意义,因为它在构造后已经设置。

    主要部分:您发布的代码并不正确且不常用。原型继承应该使用不同的。要知道如何,您可以阅读here的答案

    有趣的部分:你的代码仍然是有效的 javascript,但它不会像你预期的那样工作,因为它不能使用原型继承。

    【讨论】:

      猜你喜欢
      • 2018-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      • 2016-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多