有两段javascript代码示例 第一个代码是:
var child1 = new Parent1();
child1.prototype = Object.create(Parent1);
第二个代码是:
var child2 = new Parent2();
child2.prototype = Object.create(Parent2.prototype);
那么请你告诉我,他们之间有什么区别?
答案 0 :(得分:4)
首先 - .prototype
- 是构造函数(例如函数)而不是对象的属性。这意味着,使用构造函数创建的所有对象都将constructor prototype property
作为prototype
:)
要设置创建对象的原型,可以使用__proto__
属性或Object.setPrototypeOf
方法,但请注意,这两者都是新ES2015标准的一部分,并非所有浏览器都完全支持。< / p>
您的代码更正将如下所示
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,但它不会按预期工作,因为它不能用于原型继承。