2016-12-05 51 views
7

在這code snippet,爲什麼this.identifier不起作用,但_self.url的作品?在Javascript/Typescript中,「let _self = this」是什麼意思?

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

可能重複[「this」這個關鍵字是如何工作的?](http://stackoverflow.com/questions/3127429/how-does-the-this-keyword-work) – toskv

+0

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/let – naththedeveloper

+3

[這個JavaScript成語的基礎是什麼:var self = this?](http://stackoverflow.com/問題/ 962033 /什麼-underlies - 這-JavaScript的成語-VAR自本) – JJJ

回答

2

它需要的this在一個變量中的值(其由how the function is called確定),並將其存儲(這仍然是在封閉訪問的(這將具有的this不同的值時,它被稱爲),該getConfig被返回) 。

10

首先,你會得到一個投票,因爲這根本不是一個愚蠢的問題。 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; 

這將打印嗨我叫jill時,它被稱爲。

首先明白這一點。

現在到第二步。

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,上下文,$ this 或其他任何東西,當你分配這個值給它。與其他任何常規變量一樣,它被「鎖定就位」。

let a = 2; 
//this will never change 

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

現在當你調用你的函數,它會查找_self。它確切地知道你在說什麼。

ps。我也在尋求投票;)