gpt4 book ai didi

javascript - 附加到错误对象的属性

转载 作者:行者123 更新时间:2023-11-30 18:51:35 25 4
gpt4 key购买 nike

我修改了 Crockford object() 函数,这样我就可以传入一些参数并在新对象中自动运行一个 init 函数:

function object(o) {
function F() {}
F.prototype = o;
var params = Array.prototype.slice.call(arguments,1);
var obj = new F();
if(params.length) {
obj.init.apply(obj,params);
}
return obj;
}

这在大多数情况下工作得很好,但在一个对象中我有如下定义的函数:

MY.Object = function() {

function init(element, generator) {
build(element);
// more code after
}

function build(element) {
this._property = "example";
}
return {
init: init;
}
}();

如果我然后运行

My.Object2 = object(MY.Object, "test param");

出于某种原因,_property 被添加到 Windows 对象中。如果我构建一个公共(public)方法并使用 this.build() 调用它,这将停止。

谁能解释为什么会这样?

最佳答案

build,虽然您已经在您的类中定义了它,但在您调用它时没有上下文。因此,没有上下文意味着 this 引用您的 window 对象(至少在浏览器中)。但是,即使您没有适当的 this 上下文,您仍然可以访问您在类的“私有(private)”范围内声明的变量。

尝试使用build.call(this, element)(function.call 类似于function.apply)。

只要知道 JavaScript 的行为方式与您可能使用过的其他 OO 语言的行为方式并不完全相同,而且类以及私有(private)和公共(public)(以及其他语言功能)的概念有点像 hack。

关于javascript - 附加到错误对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3719511/

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