gpt4 book ai didi

用于对象函数扩展的 javascript .prototype

转载 作者:行者123 更新时间:2023-12-03 12:28:44 24 4
gpt4 key购买 nike

--
你好,所以,希望对 .prototype 问题有一些小的指导。

我已经浏览了SO中的所有答案,他们似乎没有涵盖这个具体问题,或者也许他们涵盖了,但我没有那样理解。

手头的问题(和代码)

function foo(){};
foo.prototype.type = 'foo';
function bar()
{
this.prototype = foo.prototype;
}
test = new bar();
console.log(test.type); // type is undefined

问题
据我了解,对 type 的请求必须向上级联原型(prototype)链,直到找到 foo 原型(prototype),但这没有发生,显然我理解错误- 为什么类型未定义?

我基本上试图找到一种方法来扩展函数对象,以便

new foo() - 返回 foo 对象
new bar() - 返回一个具有 foo 的所有方法和属性的 bar 对象。

非常感谢我能得到的任何帮助或引用!

最佳答案

好吧,当你这样做时:

function bar()
{
this.prototype = foo.prototype;
}

您不会更改 bar 对象原型(prototype),而是为名为 prototypebar 对象分配一个新属性,该对象具有 foo 对象原型(prototype),基本上:{ type: 'foo' }.

然后:

test = new bar();
console.log(test.type); // type is undefined

当然是未定义的!您从不定义它,您只需定义 prototype 属性

console.log(test.prototype); // I have surprises for you

我认为你想要一些像继承这样的想法。我建议采用 Crockford 的继承方式:

Function.prototype.inherits = function (Parent) {
this.prototype = new Parent();
return this;
};

然后,只需执行以下操作:

bar.inherits(foo);

现在,

test = new bar();
console.log(test.type); // foo!

希望这有帮助

关于用于对象函数扩展的 javascript .prototype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24045227/

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