我是一名新手程序员并在Javascript中使用命名空间。
编程时有些奇怪。我的命名空间对象中有两个“this”,但有两个不同的结果。一个是表示Window对象,另一个是命名空间Object本身。
var namespace = {
A : function A(){},
B : function B(){
var b = function b(){
// "this" => Window Object
console.log(this);
};
b();
// "this" => namespace Object
console.log(this);
}
}
namespace.B();
我希望所有这些都能代表命名空间Object。 我能做些什么吗?
顺便说一下,我之前学过 underscorejs 库。有没有任何方法我可以用下划线库或纯粹的javascript解决问题?
非常感谢。
答案 0 :(得分:0)
ECBO - 执行上下文绑定对象。上下文(this)是从调用对象设置的,即点之前的命名空间。由于您刚刚使用了b(),因此ECBO设置为window。你可以做b.call(namespace),它将上下文设置为你选择的对象。
var namespace = {
A : function A(){},
B : function B(){
var b = function b(){
console.log(this); // "this" => namespace Object
};
b.call(namespace);
console.log(this); // "this" => namespace Object
}
}
namespace.B();