javascript:扩展销毁方法不';我没有接到电话,但super确实接到了电话

javascript:扩展销毁方法不';我没有接到电话,但super确实接到了电话,javascript,php,html,jquery,css,Javascript,Php,Html,Jquery,Css,为什么扩展类中的destroy方法没有被调用,而超级destroy方法却被调用?你能让我的例子用这种方式工作吗 函数MyClass(姓名、年龄){ this.name=名称; this.destroy=函数(){ log('Super-Class Destroy Method'); } 如果(年龄==未定义){ 返回null; } 返回新的MyClass2(姓名、年龄); } 类MyClass2扩展了MyClass{ 构造函数(…参数){ super(args[0]); this.age=ar

为什么扩展类中的destroy方法没有被调用,而超级destroy方法却被调用?你能让我的例子用这种方式工作吗

函数MyClass(姓名、年龄){
this.name=名称;
this.destroy=函数(){
log('Super-Class Destroy Method');
}
如果(年龄==未定义){
返回null;
}
返回新的MyClass2(姓名、年龄);
}
类MyClass2扩展了MyClass{
构造函数(…参数){
super(args[0]);
this.age=args[1];
}
销毁{
super.destroy();
log('Extedned Destroy Method');
}
}
var myObj=MyClass('johndoe',9);

myObj.destroy()在父类的构造函数中,您可以执行以下操作:

  this.destroy = function() {
    console.log('Super Class Destroy Method');
  }
这会将destroy方法直接放在实例上。相比之下,在儿童班:

  destroy() {
    super.destroy();
    
    console.log('Extedned Destroy Method');
  }
这个
destroy
方法在原型上

对于子实例,原型链是这样的:

instance <- MyClass2.prototype <- MyClass.prototype <- Object.prototype

我这样构建它的原因是,如果年龄参数不存在,则返回null,因此我没有使用新的关键字,你能将你的代码折射成我的代码,如果该参数不存在,则返回null吗?我测试了你的代码,如果年龄不存在,则不会返回null。我知道,
返回null
(在我们的两个代码中)根本不起作用,因为您正在使用
new
调用,它必须返回一个对象。要么不使用
new
调用函数,要么返回一个空对象,而不是您的示例有效,但我仍然因为destroy方法而将代码加倍,我的意思是,我可以在一个简单类函数的构造函数中返回null,而无需使用new关键字,然后调用扩展类,但是当我想要返回null时,destory方法就是问题所在。你明白我的意思吗。你能做一个替代方法吗
destroy
方法实际上是做什么的?每个子类都需要它,这似乎很奇怪——只要把它单独放在父类上,如果可行的话,我会这么做。可能返回
null
makeParent
工厂函数是完全独立的