2016-12-05 9 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

[この "キーワードはどのように機能しますか?](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/what-underlies-this-javascript-idiom-var-self-this) – JJJ

答えて

2

それは(getConfigが復帰されることを依然として閉鎖にアクセス可能である(すなわち、それが呼び出されthisの異なる値を有することになる))変数に(how the function is calledすることによって決定される)thisの値をとり、格納。

10

まず、これはまったく愚かな質問ではないので、あなたはアップ票を獲得します。 Stackoverflowの一部の人は、資格を得るためにwayayyyです。

関数には、コンテキストと呼ばれるものがあります。コンテキストとは、関数が呼び出されているオブジェクトのことです。

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

あなたがperson.speakを行うにした場合は()

それが定義されたオブジェクトで呼び出されます。変数personはコンテキスト

です。 person.nameと同じです。

これで、この機能を他のものに取り付けることができます。

これは、私が呼び出されたときに私はジルです。

これを最初に理解してください。

今すぐステップ2に進みます。

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。 )

関連する問題