gpt4 book ai didi

Javascript 命名空间/原型(prototype)问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:22:01 27 4
gpt4 key购买 nike

我一直在努力加深对 javascript 命名空间和原型(prototype)继承的理解,但我遇到了一个问题。

我正在处理的代码示例:

var namespace = {
ex1: function () { },
ex2: function () {
this.exvar1 = 0,
this.exvar2 = 0;
}
}

namespace.ex1.prototype = {
method1: function () {

},

method2: function () {

}
};

namespace.ex2.prototype = {
method1: function () {
alert("ex2.method1" + typeof this.method1);
},

method2: function () {
alert("ex2.method2" + typeof this.method2);
}
};

如果我然后尝试调用一个方法:

namespace.ex2.method1();

我发现 namespace.ex2.method1 不是函数。

我错过了什么?

最佳答案

i find that namespace.ex2.method1 is not a function.

正确。在 JavaScript 中,您不会直接将原型(prototype)分配给对象(尽管随着 the new 5th edition 的采用,这成为可能;见下文)。相反,您在构造函数上设置原型(prototype),然后将其分配给由这些函数构造的对象。所以如果你做了

var obj = new namespace.ex2();
obj.method1();

...您会找到方法的。 (虽然没有理由不能调用 namespace.ex2.prototype.method1(); 如果你愿意的话。)

这种间接方法对于原型(prototype)语言来说有些不寻常。 ECMAscript 第 5 版确实引入了一种创建对象并直接设置其原型(prototype)的方法 (Object.create),但这是对该语言的一个相当新的补充。

有关原型(prototype)、“方法”、设置原型(prototype)链等的更多信息,您可能会找到 this article by Crockfordthis rather lesser (但也许听起来更熟悉,当然也更实用)一本真正有趣的读物。

关于Javascript 命名空间/原型(prototype)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4589378/

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