在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
实际的功能。希望它会有所帮助。
问题内容: 我一直在努力解决ECMAScript 5中引入的新方法。 通常,当我想使用继承时,我会执行以下操作: 我只是将一个新创建的Animal对象分配给Dog的原型,一切都像一个吊饰一样工作: 但是人们(没有解释)说这不是继承的工作方式,我应该使用Object.create方法: 这也有效。 使用有什么好处,或者我错过了什么? 更新:有人说也可以。所以现在我很困惑 问题答案: 在下面的内容中,
问题内容: 假设Java具有以下层次结构类: 这是C#中相同代码的(盲)重复: 当我执行Java代码时,我得到了C#返回的信息。 对我来说,C#的结果更有意义,因为引用B调用了它自己的方法。 Java设计者决定打印而不是打印的逻辑是什么?我的意思是,为什么引用B在C中使用覆盖方法?这种方法的优势是什么? 如何更改Java代码以像C#一样打印出来?我的意思是,我怎么教Java调用它使用的完全引用的方
本文向大家介绍浅谈JavaScript对象与继承,包括了浅谈JavaScript对象与继承的使用技巧和注意事项,需要的朋友参考一下 JavaScript是我在C语言之后接触的第二门编程语言,大一暑假的时候在图书馆找了一本中国人写的JavaScript程序设计来看。那个时候在编程方面几乎还是小白,再加上那本书根本没有提JavaScript的编程机制,又有一些误导性的话,一直以来对JavaScript
本文向大家介绍JavaScript中的继承之类继承,包括了JavaScript中的继承之类继承的使用技巧和注意事项,需要的朋友参考一下 继承简介 在JS中继承是一个非常复杂的话题,比其他任何面向对象语言中的继承都复杂得多。在大多数其他面向对象语言中,继承一个类只需使用一个关键字即可。在JS中想要达到继承公用成员的目的,需要采取一系列措施。JS属于原型式继承,得益于这种灵活性,我们既可以
本文向大家介绍JavaScript 类继承,包括了JavaScript 类继承的使用技巧和注意事项,需要的朋友参考一下 示例 继承的工作方式与其他面向对象的语言相同:在超类上定义的方法可在扩展子类中访问。 如果子类声明了自己的构造函数,则它必须先通过调用父构造函数,super()然后才能进行访问this。
问题内容: 假设我有两个班级:动物和狗。狗是动物的子类。我执行以下代码: 现在,我可以通过a变量来调用Dog类的方法。 但是我的问题是:如果我可以通过Dog对象(继承性)调用Animal的所有方法,那么为什么要使用多态原理呢?我可以声明: 通过此声明,可以使用所有Animal方法和Dog方法。那么为什么要使用多态呢?非常感谢您的回答。 问题答案: 在Java中,多态和继承的概念被“焊接在一起”。通