繁体   English   中英

JavaScript OOP Object.create();

[英]JavaScript OOP Object.create();

我听说Object.create(); 方法创建一个新对象,并继承作为第一个参数传递的对象的PROTOTYPE。

但是,我已经看到了以下两种情况:

var newObj = Object.create(BaseObject);

var newObj = Object.create(BaseObject.prototype);

第一种情况是继承BaseObject的原型,第二种情况是相同的,有什么区别吗? 好像没有,没有。

无论您作为Object.create的第一个参数传递的内容是什么,都将分配给新对象的原型。 因此,这实际上取决于BaseObject是什么,如果您在BaseObject定义了函数,则第一个示例是正确的,但是也可以将函数分配给BaseObject的原型,在这种情况下,您应该将原型传递给Object.create

var BaseObject = {
   doSomething: function() { alert('hi'); }
}

var newObj = Object.create(BaseObject);
newObj.doSomething() // Alerts hi

function BaseObject() {
}

BaseObject.prototype.doSomething = function() { alert('hi'); };

function ChildObject() {
}

ChildObject.prototype = Object.create(BaseObject.prototype);

var newObj = new ChildObject();
newObj.doSomething() // Alerts hi

这取决于您要扩展的内容是使用原型,还是要在创建对象时使用new 与以往一样, MDN拥有使用prototypeObject.create构建继承链的良好示例

 var newObj = Object.create(BaseObject); 

从单个对象继承时使用此对象,该对象位于变量BaseObject (不常见的大小写)。 您更有可能看到

var newObj = Object.create(baseObject);
var newObj = Object.create(instanceOfBase);
 var newObj = Object.create(BaseObject.prototype); 

这只是做相同,但是从你的对象newObj将继承位于.prototype财产BaseObject这里。 这是构造函数的常见情况:

var newObj = Object.create(BaseConstructor.prototype);

Object.create的行为没有什么区别,只有您传递了不同的参数。


第一种情况是继承BaseObject的原型

不,不是的。 它创建了一个newObj ,它从继承BaseObject对象本身。 如果BaseObject是一个函数,则可能不是您想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM