gpt4 book ai didi

JavaScript 继承;调用和原型(prototype)

转载 作者:行者123 更新时间:2023-11-29 10:48:15 25 4
gpt4 key购买 nike

在Javascript中实现继承,一般分为以下两步;

假设我有一个基类“Animal”

var Animal = function(name){
this.name = name;
}

我现在想从中派生一个子类“Dog”。所以我想说

var Dog = function(name) {
Animal.call(this,name);
}

所以我从我的派生类构造函数调用我的父类构造函数。第二步设置原型(prototype)如下;

Dog.prototype = new Animal();

现在我可以从我的派生类 Dog 中访问任何基本的“Animal”类属性。

所以我的问题是为什么这两个步骤是必要的?如果我们只是使用

调用基类构造函数
Animal.call(this,name);

这还不足以实现继承吗?

为什么我们需要使用 Dog.prototype = new Animal(); 设置原型(prototype)属性?

我想了解以上 2 个步骤的作用?

最佳答案

var Animal = function(name){
this.name = name;
}
Animal.prototype.sleep = function() {
console.log("Sleeping")
}

...
// Without this line:
Dog.prototype = new Animal();

// the following code will fail, since `d` does not contain `sleep`
d = new Dog();
d.sleep();

Animal.call(this,name); 只是调用函数 Animal,但使用与调用函数相同的 this

Dog.prototype = new Animal(); 设置原型(prototype)的原型(prototype)。但是,Dog.prototype = Object.create(Animal.prototype) 可能更正确。

关于JavaScript 继承;调用和原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15265829/

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