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

时间:2016-12-05 14:01:04

标签: javascript angular typescript

在此code snippet中,为什么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;
    };
}

let _self = this实际上也这样做了吗?

1 个答案:

答案 0 :(得分:17)

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

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

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

如果你要做person.speak()

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

所以当你说这个。它与说person.name

相同

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

var newperson = {name:'jill'}
newperson.speak = person.speak;

这将打印你好我是吉尔,当它被称为。

先了解这一点。

现在进入第二步。

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

检查一下。

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

   }
}


let func = person.getSpeakFunction()

现在函数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()

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

所以使用单词_self,context,$ this 或者将其赋值给它时的任何其他内容。 它已被锁定到位['像任何其他常规变量一样。

let a = 2;
//this will never change

let _self = this //_self will never change as it's your variable 

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

PS。我也在寻求投票;)