JavaScript继承:Object.create与New
在JavaScript中,这两个示例有什么区别:
先决条件:
function SomeBaseClass(){}
SomeBaseClass.prototype = {
doThis : function(){
},
doThat : function(){
}
}
使用Object.create的继承示例A:
function MyClass(){}
MyClass.prototype = Object.create(SomeBaseClass.prototype);
使用new关键字的继承示例B
function MyClass(){}
MyClass.prototype = new SomeBaseClass();
这两个例子似乎做同样的事情。您何时会选择一个?
另一个问题:考虑下面链接(第15行)中的代码,其中对函数自己的构造函数的引用存储在原型中。为什么这有用?
摘录(如果您不想打开链接):
THREE.ImageLoader.prototype = { constructor: THREE.ImageLoader
}
回答:
在您的问题中,您提到Both examples seem to do the same thing
,这根本不是真的,因为
你的第一个例子
function SomeBaseClass(){...}SomeBaseClass.prototype = {
doThis : function(){...},
doThat : function(){...}
}
function MyClass(){...}
MyClass.prototype = Object.create(SomeBaseClass.prototype);
在这个例子中,你只是继承SomeBaseClass' prototype
,但如果你在你有一个属性SomeBaseClass
像
function SomeBaseClass(){ this.publicProperty='SomeValue';
}
如果你像这样使用它
var obj=new MyClass();console.log(obj.publicProperty); // undefined
console.log(obj);
该obj
对象将没有此示例中的publicProperty
属性。
你的第二个例子
MyClass.prototype = new SomeBaseClass();
它正在执行该constructor
函数,并创建一个实例SomeBaseClass
并继承整个SomeBaseClass
对象。所以,如果您使用
var obj=new MyClass(); console.log(obj.publicProperty); // SomeValue
console.log(obj);
在这种情况下publicProperty
,obj
像本示例一样,它的属性也可用于对象。
由于Object.create
某些旧版浏览器无法使用,因此您可以使用
if(!Object.create){
Object.create=function(o){
function F(){}
F.prototype=o;
return new F();
}
}
上面的代码只是在Object.create
功能不可用时添加了功能,因此您可以使用Object.create
功能,我认为上面的代码描述了Object.create
实际的功能。希望它会有所帮助。
以上是 JavaScript继承:Object.create与New 的全部内容, 来源链接: utcz.com/qa/404914.html