[英]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拥有使用prototype
和Object.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.