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.我也在寻求投票;)
归档时间: |
|
查看次数: |
4555 次 |
最近记录: |