javascript中两种原型设置代码的差异

javascript中两种原型设置代码的差异,javascript,oop,prototype,Javascript,Oop,Prototype,有两个javascript代码示例。 第一个代码是: var child1 = new Parent1(); child1.prototype = Object.create(Parent1); var child2 = new Parent2(); child2.prototype = Object.create(Parent2.prototype); 第二个代码是: var child1 = new Parent1(); child1.prototype = Object.create(

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

var child1 = new Parent1();
child1.prototype = Object.create(Parent1);
var child2 = new Parent2();
child2.prototype = Object.create(Parent2.prototype);
第二个代码是:

var child1 = new Parent1();
child1.prototype = Object.create(Parent1);
var child2 = new Parent2();
child2.prototype = Object.create(Parent2.prototype);
那么你能告诉我,它们之间有什么区别吗?

首先-.原型-是构造函数的属性,例如函数而不是对象。这意味着,使用构造函数创建的所有对象都将具有构造函数原型属性作为原型:

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

您的代码将如下所示

var child1 = new Parent1();
Object.setPrototypeOf(child1, Object.create(Parent1));
//vs
var child2 = new Parent2();
Object.setPrototypeOf(child2, Object.create(Parent2.prototype));
区别在于,在第一种情况下,您将函数对象设置为原型,这有点毫无意义,因为它只包含默认的函数对象属性。在第二个示例中,您将构造函数的原型设置为构造对象的原型,这也没有意义,因为它在构造之后就已经设置好了

主要部分:您发布的代码并不正确,也不常用。原型遗传应该用不同的方法。要知道如何做,您可以阅读

有趣的是:您的代码仍然是有效的javascript,但它不会像您预期的那样工作,因为它不能与原型继承一起工作