2013-02-16 38 views
0

如何在Javascript中設置this的值?
例如:Javascript - 設置值

var obj = { 
    a: 'b', 
    c: "d", 
    e: function() { 
     this = { 
      one: 1, 
      two: 2 
     }; 
    } 
}; 

這甚至可能嗎?

+1

如果你在函數內創建'{one:1,two:2}'對象,爲什麼你需要將它分配給'this'?你究竟在努力完成什麼?參見[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) – 2013-02-16 19:41:25

回答

1

你不能在JavaScript中明確地指定值爲this,就像你問的那樣。

一旦函數開始執行,該函數內的this的值不會改變(儘管嵌入函數可以有其自己的值this)。

您可以指定屬性this像這樣或許這就是你想要的:

this.one = 1; 
this.two = 2; 

相反,this由函數的調用,什麼怎麼叫的功能是確定控制在函數內部設置了什麼this。例如:

obj.e() 

將設置this內部的e()的值設定爲obj


您還可以使用.apply().call()造成的this的值設置爲比包含的對象以外的東西。

例如做你問什麼,此代碼:

var test = {one:1, two:2}; 
var obj = { a:'b', c:"d", e:function(){ 
    // this will be set to the test object in here when called as below 
}}; 

obj.e.call(test); 

將導致此特定呼叫內的this價值e()設置爲您的請求的對象。

0
var obj = { a:'b', c:"d", e:function(){ 
    // Here, this.one === 1 and this.two === 2 
}.bind({ one: 1, two : 2})}; 
0

「這個」是不能在函數體內而設定的保留關鍵字。

您可以使用該函數的applycall方法調用具有此特定值的函數。 obj.e.call({one: 1, two: 2})。查看這兩個函數方法的MDN文章。

每次調用函數時,您還可以使用ECMAScript 5的bind方法永久設置值this。這是一種ECMAScript 5方法,因此在舊版瀏覽器中不起作用,但是您可以使用添加對舊版瀏覽器的支持的填充。

0

這個怎麼樣?

this.one=1; 
this.two=2;