我在 StackOverflow 中看到了这一点: https ://stackoverflow.com/a/7786090/289246
答案告诉你要做:
DynamicBody.prototype = Object.create( PhysicsBody.prototype );
使用 Object.create 的原因是什么?
为什么我们不能只使用:
DynamicBody.prototype = PhysicsBody.prototype;
?
我在 StackOverflow 中看到了这一点: https ://stackoverflow.com/a/7786090/289246
答案告诉你要做:
DynamicBody.prototype = Object.create( PhysicsBody.prototype );
使用 Object.create 的原因是什么?
为什么我们不能只使用:
DynamicBody.prototype = PhysicsBody.prototype;
?
您可以(技术上),但是您所做的任何更改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
增加一层间接性。
Javascript 具有基于原型的继承。这意味着,继承直接从对象发生,与从类继承的经典继承不同。
当你这样做时:
Foo.protoype = Bar.prototype
- 您正在从Bar
对象继承所有变量和方法。但是对 ' 原型的任何更改Foo
都将导致Bar
' 原型被更改(由于上述声明,Foo.prototype
引用Bar.prototype
)。
Object.create()
用于将经典继承(如属性)添加到Foo
. 因此,您不是直接从对象继承,而是从Object
指定的原型继承。Foo
并且声明之后的任何更改Foo.prototype = Object.create(Bar.prototype)
都不会改变Bar
。
看到这里了解更多信息!