2012-06-20 29 views
-5

是否像下面的可能?javascript屬性存儲這個

var obj = { 
    data:'some data', 
    init:function(){ 
     console.log(this.data); 
     console.log(obj.data); 
    } 
} 
obj.init(); 

這裏,console.log(this.data)console.log(obj.data)都返回相同的值。

是否可以將this存儲在某些變量中,例如我存儲在'some data'中的data

假設我們以某種方式將this存儲在$this中。然後,console.log($this.data)應該像console.log(this.data)一樣工作。

+2

是的,這是可能的,但不是在一個單一的步驟。你正在努力完成什麼? –

+0

(注意強調「*實際*」...) – 2012-06-20 21:36:49

+0

@MattBall,因爲這個我不能在回調函數裏面使用,但是如果我把它存儲在第一位,我想我可以在裏面調用回調函數以及直接方法... – HamidRaza

回答

1

As in ...賦值?

var $this = this; 

編輯:如果你的意思是這樣的:

var obj = { 
    selfReference: this 
}; 

然後沒有,這是不可能的。之後您必須將其分配:

var obj = {}; 
obj.selfReference = obj; 

我不確定爲什麼你想這樣做,但首先,

+0

您的意思是我們可以編寫這樣的代碼: 'var obj = {var $ this = this; data:'some data', init:function(){ console.log(this.data); console.log(obj.data); console.log($ this.data); } } obj。init();' ....這不會工作 – HamidRaza

+3

@hamidraza:不,你不能這樣做。該行屬於函數內部,現在我只是困惑。你想達到什麼目的? – Ryan

+0

這種方式可以將'一些數據'存儲在'數據'中,是否可以在'$ this'中存儲'this'? – HamidRaza

2

我不知道爲什麼你會想要做你問什麼,但是你可以做到這一點:

var obj = { 
    data:'some data', 
    init:function(){ 
     this.self = this; 
     console.log(this.data); 
     console.log(obj.data); 
     console.log(this.self); 
    } 
} 
obj.init(); 

如果您解釋一下爲什麼你要做到這一點,我們可以可能會提供更合適的建議,並且幾乎沒有理由將this的值保存在實例變量中,因爲爲了檢索實例變量,已經需要this的值。

+0

我不想存儲這個裏面的任何函數,我想把它存儲爲數據。這樣我就可以在任何函數或方法中調用它。 – HamidRaza

+0

因爲我不能在回調函數中使用,但是如果我將它存儲在第一位,我認爲我可以在回調函數內以及直接方法中調用... – HamidRaza

+0

@hamidraza - 請顯示我們整個代碼,你想要使用你存儲的'this'值。在你的例子中,'this'已經存儲在'obj'變量中,所以可以從那裏使用它。 'obj.data'會引用你存儲的數據。 – jfriend00

1

存儲this在Javascript中經常使用以避免函數範圍的問題。通常用於存儲this的變量稱爲that爲:

var that = this

您還可以設置您通過使用

myFunction.call(myCustomThisReference, param1, param2) 

myFunction.apply(myCustomThisReference, [param1,param2] 
調用函數的這個對象

請參閱callapply瞭解更多詳情

相關問題