在此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
实际上也这样做了吗?
答案 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。我也在寻求投票;)