javascript中两个原型设置代码的区别
Difference between two prototype setting code in javascript
有两段 javascript 代码示例。
第一个代码是:
var child1 = new Parent1();
child1.prototype = Object.create(Parent1);
第二个代码是:
var child2 = new Parent2();
child2.prototype = Object.create(Parent2.prototype);
那你能告诉我,它们之间有什么区别吗?
首先 - .prototype
- 是 属性 构造函数(例如函数)而不是对象。这意味着,使用您的构造函数创建的所有对象都将 constructor prototype property
作为 prototype
:)
要设置创建对象的原型,可以使用__proto__
property or 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,但它不会像您预期的那样工作,因为它不适用于原型继承。
有两段 javascript 代码示例。
第一个代码是:
var child1 = new Parent1();
child1.prototype = Object.create(Parent1);
第二个代码是:
var child2 = new Parent2();
child2.prototype = Object.create(Parent2.prototype);
那你能告诉我,它们之间有什么区别吗?
首先 - .prototype
- 是 属性 构造函数(例如函数)而不是对象。这意味着,使用您的构造函数创建的所有对象都将 constructor prototype property
作为 prototype
:)
要设置创建对象的原型,可以使用__proto__
property or 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,但它不会像您预期的那样工作,因为它不适用于原型继承。