Javascript名称空间不同的范围

时间:2015-08-22 01:36:52

标签: javascript scope namespaces underscore.js

我是一名新手程序员并在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解决问题?

非常感谢。

1 个答案:

答案 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();