gpt4 book ai didi

javascript - 在创建函数存储在散列中的 JS 对象时,“this”被限定为窗口对象

转载 作者:行者123 更新时间:2023-11-30 17:57:04 24 4
gpt4 key购买 nike

我不确定这个标题是否有意义,但本质上我正在尝试为我正在开发的应用程序编写一个非常简单的 Javascript 依赖项注入(inject)容器。

这是容器:

jedi = new function() {
var library = {};

this.module = function(name, module) {
if (arguments.length == 1) {
return library[name];
}

library[name] = module;
};
};

然后我创建一个 Backbone 模型并将其添加为依赖项,如下所示:

(function () {

var addColourSchemeModel = Backbone.Model.extend({
getColourJSON: function(prop) {
var cols = this.get(prop).split(',');
return {
R: cols[0],
G: cols[1],
B: cols[2]
};
}
});

jedi.module('AddColourSchemeModel', addColourSchemeModel);

})();

当我尝试像这样创建此模块的新实例时出现问题:

var colourModel = new jedi.module('AddColourSchemeModel')({
// json object containing model values
});

我得到一个错误Object [object global] has no method 'set'

奇怪的是主干模型初始化方法等被调用,但是 this 被限定在窗口而不是被初始化的对象,这是在尝试时发生错误的地方在某个时候调用 this.set 但这实际上是窗口。

最佳答案

创建实例时,需要将 jedi.module('AddColourSchemeModel') 放在括号中。否则你的代码将被解释为:

var colourModel = (new jedi.module('AddColourSchemeModel'))({
// json object containing model values
});

所以正确的做法应该是:

var colourModel = new (jedi.module('AddColourSchemeModel'))({
// json object containing model values
});

关于javascript - 在创建函数存储在散列中的 JS 对象时,“this”被限定为窗口对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17908566/

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