在使用对象文字表示法定义的模块中关键字this的最佳实践?

时间:2014-03-26 15:44:48

标签: javascript design-patterns

我使用对象文字表示法定义了一个模块,如下所示:

   var myModule = {
                myProperty: "someValue",
                myConfig: {
                       useCaching: true,
                       language: "en"
                },
                saySomething: function () {
                       console.log( "XXX" );
                },

                functionA: function () {
                       // do something
                ),
                functionB: function () {
                      // need call functionA
                     myModule.functionB();  // style 1
                     this.functionB();      // style 2
                )
    };

使用关键字this的目的是什么?样式1和&之间的区别是什么? 2。 我还注意到有些人使用var that = this,然后是func(),这怎么会更好?我应该把var that = this放在我的模块中。

对象文字符号的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

首先,this的值取决于您所称的方法。当您执行myModule.func()时,this内的func将为myModule。当你做更复杂的事情时:

function delegator(func) {
  func();
}

delegator(myModule.functionB);

...,您会注意到this中的func将不再引用myModule,而是将成为全局对象(或undefined如果您&# 39;重新使用严格模式)。

这就是人们将that设为this的原因。在您的场景中,您无法放置该别名,因为您正在定义一个对象。

当您知道将始终在您的模块上调用该方法时,使用this是安全的,否则您应该使用myModule.functionB()方法。