2

我在 StackOverflow 中看到了这一点: https ://stackoverflow.com/a/7786090/289246

答案告诉你要做:

DynamicBody.prototype = Object.create( PhysicsBody.prototype );

使用 Object.create 的原因是什么?
为什么我们不能只使用:

DynamicBody.prototype = PhysicsBody.prototype;

?

4

2 回答 2

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增加一层间接性。

于 2013-03-08T22:23:18.673 回答
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

看到这里了解更多信息!

于 2013-03-08T22:32:12.003 回答