在javascript中,别名命名空间?

Mia*_*ter 10 javascript

在javascript中,我不应该为命名空间命名吗?

Google JavaScript样式指南命名章节中,它说:

//Do not alias namespaces.
myapp.main = function() {
  var namespace = some.long.namespace;
  namespace.MyClass.staticHelper(new namespace.MyClass());
};
Run Code Online (Sandbox Code Playgroud)

但我无法完全理解这个问题.为简洁起见,为什么不使用命名空间?

Mat*_*all 6

您更改this,这可能会破坏别名命名空间中的函数.例:

var foo = {
    bar: function () {
        console.log(this.baz);
    },
    baz: 42
};

foo.bar(); // prints 42
var alias = foo.bar;
alias(); // prints undefined, because `this` is no longer `foo`
Run Code Online (Sandbox Code Playgroud)

  • 但是,命名空间通常不是函数,而是包含例如函数的对象.但是提到这个很好. (4认同)
  • `var alias = foo.bar.bind(foo);`:p (2认同)
  • 在示例中,别名将更改`this`,但`foo.bar`不是命名空间.实际上`foo`是_namespace_,如果别名`foo`,我似乎不会改变`this`. (2认同)