gpt4 book ai didi

javascript - 如何链接两个构造函数并将它们作为对象的原型(prototype)继承?

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

我在 JavaScript 中使用 prototypes(我是 JS 的新手)并坚持使用以下 JS 代码片段:

我创建了两个函数:

函数一

function sample1() {
this.uname = "Andrew";
}

函数二

function sample2() {
this.age = 21;
}

我把sample2的属性继承给了sample1如下:

sample1.prototype = sample2; 

到目前为止,一切正常,就像我可以看到 sample1sample2 作为原型(prototype)一样。但是,问题在于使用包含 sample2 属性的 sample1 创建对象。

let test = new sample1;

现在,尝试访问 sample1 的属性会给出正确的输出。

test.uname;

但是,尝试访问 age 时输出为 undefined

问题:

如何使用test对象访问age属性?

注意:以上是使用 Chrome 开发者工具 - 控制台尝试的

谢谢。

最佳答案

您的unameage 属性由构造函数直接在它们初始化的每个实例上创建。在这里使用原型(prototype)继承是没有意义的。只需运行两个构造函数:

function sample2() {
this.age = 21;
}
function sample1() {
sample2.call(this); // runs the other constructor on this instance
this.uname = "Andrew";
}

这很像重写方法时的 super 调用。

I am working with prototypes in JavaScript

还没有 :-) 你的原型(prototype)对象是空的。

I inherited the properties of sample2 to sample1 as follows:

sample1.prototype = sample2; 

呃,你不应该那样做。 sample2 是一个函数对象,您通常不希望从中继承任何内容。请注意,sample1.prototype 是所有使用 new sample1 创建的实例的继承对象——它们不是函数。您可能正在寻找

sample1.prototype = Object.create(sample2.prototype);

关于javascript - 如何链接两个构造函数并将它们作为对象的原型(prototype)继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48343014/

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