gpt4 book ai didi

javascript - 使用/不使用原型(prototype)的 JS 继承

转载 作者:行者123 更新时间:2023-11-29 14:45:51 26 4
gpt4 key购买 nike

我正在努力学习继承。如果我在 SuperClass 中定义我的方法 superPrint(),我将无法使用子实例执行

eg: new ChildClass().superPrint();//抛出错误 fn not available

/*Parent Class*/
var SuperClass= function(){
this.name = '';
this.superPrint = function(){console.log('Doesnt Work');};
}

/*Child Class*/
var ChildClass= function(){
this.print=function(){
console.log('Always works');
}
}

/*Child method inheriting from the parent method*/
ChildClass.prototype = Object.create(SuperClass.prototype);

/*Instantiating the child method*/
var obj = new ChildClass();
obj.print();//This works
obj.superPrint();//This gives error *******

但是如果函数 superPrint() 是使用原型(prototype)定义的,它就可以工作。为什么?(使用 new ChildClass().workingPrint(); 调用,现在可以使用了)

/*Parent Class*/
var SuperClass= function(){
this.name = '';
}

SuperClass.prototype.workingPrint = function(){console.log('This Works');};

最佳答案

this.superPrint 是 SuperClass 将创建的实例的方法。由于您只是将原型(prototype)复制到 ChildClass 中,而不是为您的 ChildClass 创建 SuperClass 实例,因此它不会包含实例方法。

如果您想使用 object.create,除了复制原型(prototype)之外,您还可以将类似 SuperClass.call(this); 的内容添加到您的 ChildClass 的定义中。

关于javascript - 使用/不使用原型(prototype)的 JS 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33041053/

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