gpt4 book ai didi

JavaScript 继承 : Object. create vs new

转载 作者:IT王子 更新时间:2023-10-29 02:39:05 24 4
gpt4 key购买 nike

在 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 行),其中对函数自身构造函数的引用存储在原型(prototype)中。为什么这很有用?

https://github.com/mrdoob/three.js/blob/master/src/loaders/ImageLoader.js

摘录(如果你不想打开链接):

THREE.ImageLoader.prototype = {

constructor: THREE.ImageLoader
}

最佳答案

在你的问题中你提到两个例子似乎做同样的事情,这根本不是真的,因为

你的第一个例子

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 对象不会有像 in this example 这样的 publicProperty 属性.

你的第二个例子

MyClass.prototype = new SomeBaseClass();

它正在执行 constructor 函数,生成 SomeBaseClass 的实例并继承整个 SomeBaseClass 对象。所以,如果你使用

    var obj=new MyClass();
console.log(obj.publicProperty); // SomeValue
console.log(obj);​

在这种情况下,它的 publicProperty 属性也可用于 obj 对象,如 in this example .

由于 Object.create 在某些旧浏览器中不可用,在这种情况下您可以使用

if(!Object.create)
{
Object.create=function(o){
function F(){}
F.prototype=o;
return new F();
}
}

上面的代码只是添加了 Object.create 函数,如果它不可用所以你可以使用 Object.create 函数,我认为上面的代码描述了 Object.创建 确实如此。希望它能以某种方式提供帮助。

关于JavaScript 继承 : Object. create vs new,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13040684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com