在Javascript/Typescript中"让_self = this"意味着什么?

cho*_*Bao 13 javascript typescript angular

在这段代码片段中,为什么它this.identifier不起作用但_self.url有效?

  getConfig() {
    let _self = this;
    return function () {
      this.page.url = this.url || window.location.href;
      this.page.identifier = _self.identifier;
      this.page.category_id = this.categoryId;
      this.language = this.lang;
    };
}
Run Code Online (Sandbox Code Playgroud)

因此,没有let _self = this真正做?

Lpc*_*ark 19

首先,你得到一个投票,因为这根本不是一个愚蠢的问题.Stackoverflow上的一些人很有资格获得授权.

函数有一个称为上下文的东西.上下文是调用函数的对象.

let person = {
   name:"bill",
   speak:function(){
      console.log("hi i am "+this.name)
   }
}
Run Code Online (Sandbox Code Playgroud)

如果你要做person.speak()

它将在已定义的对象上调用.变量person是上下文

所以当你说这个.这与说person.name是一样的

现在您可以将该功能附加到其他内容.

var newperson = {name:'jill'}
newperson.speak = person.speak;
Run Code Online (Sandbox Code Playgroud)

这将打印嗨我是吉尔时,它被称为.

先了解这一点.

现在进入第二步.

GetConfig返回一个函数,但是这个函数没有附加任何对象.

看一下这个.

let person = {
   name:"bill",
   getSpeakFunction:function(){
      return function(){
         console.log('hi my name is '+this.name)
      }

   }
}


let func = person.getSpeakFunction()
Run Code Online (Sandbox Code Playgroud)

现在函数func都是他自己.

现在当它被称为谁是"这个"你到底在说什么.这就是功能的想法.

所以我们可以通过说出来帮助这个功能.

let person = {
   name:"bill",
   getSpeakFunction:function(){
      let context = this; //listen hear function this is what i am talking about
      return function(){
         console.log('hi my name is '+context.name)
      }

   }
}


let func = person.getSpeakFunction()
Run Code Online (Sandbox Code Playgroud)

是特殊的语言决定了它的价值,但背景不是.上下文将是分配给它的任何内容.除非程序员改变它,否则它不会改变.

因此,当您为其分配此值时,请使用单词_self,context,$ this或其他任何内容.它像任何其他常规变量一样"锁定到位".

let a = 2;
//this will never change

let _self = this //_self will never change as it's your variable 
Run Code Online (Sandbox Code Playgroud)

现在,当你调用你的函数时,它会查找_self.它确切地知道你在说什么.

PS.我也在寻求投票;)


Que*_*tin 3

它获取 的值this(由函数的调用方式this决定)并将其存储在一个变量中(该变量仍然可以在返回的闭包中访问(调用时将具有不同的值) getConfig)。