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

Best practice for the keyword this in a module defined using object literal notation?

本文关键字:关键字 this 最佳 定义 文字 对象 表示 模块      更新时间:2023-09-26

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

   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和样式1的区别是什么?2.我也注意到有些人用var that = this,然后那个。func(),这个怎么更好?我应该把var that = this放在哪里,在我的模块。

对象文字表示法的最佳实践是什么?

首先,this的值取决于您调用的方法。当您执行myModule.func()时,func中的this将是myModule。当你做更复杂的事情时,比如:

function delegator(func) {
  func();
}
delegator(myModule.functionB);

…,你会注意到func中的this将不再引用myModule,而是全局对象(或者undefined,如果你使用严格模式)。

这就是人们将that别名为this的原因。在您的场景中,没有地方可以放置别名,因为您正在定义一个对象。

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