gpt4 book ai didi

javascript - 构造函数中的 DRY JavaScript 继承

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

是否有可能让 DogCat 继承自 Animal(不使用 classextends 关键字),而不编辑已经编写的代码,同时将所有新代码保留在当前构造函数中

function Animal() {
this.sleep = function() {
var hoursSleepPerNight = this.hoursSleepPerNight;
console.log( "z".repeat(hoursSleepPerNight) );
}
}

function Dog() {
this.hoursSleepPerNight = 8;
}

function Cat() {
this.hoursSleepPerNight = 7;
}

var dog = new Dog();
dog.sleep();
// "zzzzzzzz"

最佳答案

Javascript 使用原型(prototype)继承,所以你可以从 Animal 继承,如下所示:

function Animal() {
this.sleep = function() {
console.log("z".repeat(this.hoursSleepPerNight));
}
}

function Dog() {
this.hoursSleepPerNight = 8;
}
Dog.prototype = new Animal();
Dog.prototype.constructor = Dog;

function Cat() {
this.hoursSleepPerNight = 7;
}
Cat.prototype = new Animal();
Cat.prototype.constructor = Cat;

var dog = new Dog();
dog.sleep();

这是一个 fiddle :https://jsfiddle.net/k0op9sb6/

如果出于某种原因您必须在构造函数中设置原型(prototype),看起来您可以使用 Object.setPrototypeOf__proto__ ( proto ) - - 但是这是普遍不推荐:

function Dog() {
this.hoursSleepPerNight = 8;
Object.setPrototypeOf(this, new Animal()); // this.__proto__ = new Animal();
}

关于javascript - 构造函数中的 DRY JavaScript 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38162966/

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