您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

JavaScript继承:Object.create与New

JavaScript继承:Object.create与New

在您的问题中,您提到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);?

在这种情况下publicPropertyobj本示例一样它的属性也可用于对象。

由于Object.create某些旧版浏览器无法使用,因此您可以使用

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

上面的代码只是在Object.create功能不可用时添加功能,因此您可以使用Object.create功能,我认为上面的代码描述了Object.create实际的功能。希望它会有所帮助。

javascript 2022/1/1 18:17:06 有612人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶