在您的问题中,您提到
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); // undefinedconsole.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实际的功能。希望它会有所帮助。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)