我在StackOverflow中看到了这个: https://stackoverflow.com/a/7786090/289246
答案告诉我们:
DynamicBody.prototype = Object.create( PhysicsBody.prototype );
使用Object.create的原因是什么? 为什么我们不能使用:
DynamicBody.prototype = PhysicsBody.prototype;
答案 0 :(得分:10)
您可以(技术上),但是您对DynamicBody.prototype
所做的任何更改也将在PhysicsBody.prototype
上进行,即它会影响所有PhysicsBody
个实例,而这通常不是什么你想要的。
示例:
function Foo() {};
Foo.prototype.say = function() {
alert('Foo');
};
var foo = new Foo();
function Bar() {};
Bar.prototype = Foo.prototype;
Bar.prototype.say = function() {
alert('Bar');
};
foo.say(); // alerts 'Bar'
Object.create
增加了一个间接层。
答案 1 :(得分:0)
Javascript具有基于原型的继承。这意味着,继承直接来自对象,而不像从类继承的经典继承。
执行此操作时:
Foo.protoype = Bar.prototype
- 您继承了Bar
对象中的所有变量和方法..但对Foo
原型的任何更改都会导致Bar
的原型变为已更改(由于上述声明,Foo.prototype
引用Bar.prototype
)。
Object.create()
用于将属性等经典继承添加到Foo
。因此,您不是直接从对象继承,而是使用指定的原型从Object
继承。语句Foo
之后对Foo.prototype = Object.create(Bar.prototype)
的任何更改都不会更改Bar
。
请参阅here了解详情!