gpt4 book ai didi

javascript - this.constructor.apply 与 this.parent.apply

转载 作者:行者123 更新时间:2023-11-30 00:32:16 29 4
gpt4 key购买 nike

传统上对象继承如下所示:

function Parent() {
console.log('parent constructor');
}
Parent.prototype.method = function() {
console.log('parent method');
}


function Child() {
this.parent.apply(this,arguments);
console.log('child constructor');
}

Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;
Child.prototype.parent = Parent;

但这也是有效的,而且在我看来看起来更好:

function Parent() {
console.log('parent constructor');
}
Parent.prototype.method = function() {
console.log('parent method');
}


function Child() {
this.constructor.apply(this,arguments);
console.log('child constructor');
}

Child.prototype = Object.create(Parent.prototype);
// without next lines, constructor will be Parent
// Child.prototype.constructor = Child;
// Child.prototype.parent = Parent;

所以,

使用第一种方法的真正原因是什么?

如果我使用第二种方法会遇到什么问题?

最佳答案

What is the real reason to use first method ?

事实上,它们都不能正常工作。如果有另一个继承自 Child 的类,this.parentthis.constructor 将不会指向预期的函数 - 你要么跳过一个级别或进入无限递归。

What problems I can get if I will use second method ?

(new Child).constructor 将是 Parent,这有点出乎意料。参见 Is there a good use case for the constructor property in Javascript? .当然上面的问题仍然存在,无论你使用parent还是constructor作为属性名来引用你的父类。

对于正确的“ super ”调用,显式引用父构造函数:

function Child() {
Parent.apply(this,arguments);
console.log('child constructor');
}

关于javascript - this.constructor.apply 与 this.parent.apply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28985771/

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