javascript继承为什么要使用Object.create?

时间:2013-03-08 22:20:50

标签: javascript jquery backbone.js

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

答案告诉我们:

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

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

DynamicBody.prototype = PhysicsBody.prototype;

2 个答案:

答案 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了解详情!