gpt4 book ai didi

javascript - 不理解Javascript继承

转载 作者:行者123 更新时间:2023-11-27 22:38:11 24 4
gpt4 key购买 nike

我正在学习 javascript 继承。我在这里找到了一个很好的解释: JavaScript Inheritance

function A() {
B.call(this);
}

function B() {
C.call(this);
this.bbb = function() {
console.log("i was inherited from b!");
}
}

我正在尝试基于上述和其他解决方案来实现继承(网上有很多解决方案,它们似乎都提出了不同的建议)。不管怎样,我试图让 SportsCar 继承自 Car 并使用 Car 的 describeSelf 方法。我不确定我做错了什么。 PLUNK for convenience

var Car = function(make, topSpeed, color){
this.make = make;
this.topSpeed = topSpeed;
this.color = color;
}

Car.prototype.describeSelf = function(){
document.write('Hi, I am a: ' + this.make + ', my top speed is ' + this.topSpeed + ' and I am ' + this.color);
}

var corolla = new Car('toyota', 120, 'blue');

corolla.describeSelf();

//Code works fine up to here
var SportsCar = function(engineSize, make, topSpeed, color) {
Car.call(this, make, topSpeed, color);
this.engineSize = engineSize;
};

var fordGt = new SportsCar('V8', 'ford', 205 , 'red');

fordGt.describeSelf();

我真的不明白call的作用。

编辑:看来我不太清楚我要问的是什么。问题的本质是让这一行起作用: fordGt.describeSelf(); 并获得关于我当前做错了什么的解释。

最佳答案

添加用add this注释的行。

var Car = function(make, topSpeed, color){
this.make = make;
this.topSpeed = topSpeed;
this.color = color;
}

Car.prototype.describeSelf = function(){
document.write('Hi, I am a: ' + this.make + ', my top speed is ' + this.topSpeed + ' and I am ' + this.color);
}

var corolla = new Car('toyota', 120, 'blue');

corolla.describeSelf();

//Code works fine up to here
var SportsCar = function(engineSize, make, topSpeed, color) {
Car.call(this, make, topSpeed, color);
this.engineSize = engineSize;
};

// add this
SportsCar.prototype = Object.create( Car.prototype );

var fordGt = new SportsCar('V8', 'ford', 205 , 'red');

fordGt.describeSelf();

这是因为您确实希望正确设置原型(prototype)链,以便新创建的对象在链中具有其父原型(prototype)。

另一方面,如果您将该方法附加到对象本身

var Car = function(make, topSpeed, color){
this.make = make;
this.topSpeed = topSpeed;
this.color = color;
this.describeSelf = function() ...
}

该链可以被忽略(因为您已经从另一个构造函数调用了构造函数,但是最终会得到附加到新创建的实例的同一函数的多个实例。

关于javascript - 不理解Javascript继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38940005/

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