2014-12-13 33 views
0
var obj = { 
    name : 'object', 
    itis : this.name, 
} 

爲什麼它是未定義的?當我查看對象的值時,它的值爲空。謝謝。使用'this'使對象中的值爲

+0

'this'指的是什麼? – 2014-12-13 07:16:33

+3

'this'不是指'obj',它指的是這個範圍內的任何this。 – deceze 2014-12-13 07:17:53

回答

2

this由其出現的範圍定義。所以,你不能在對象字面上使用你想要的方式,因爲對象字面沒有自己的作用域。

this具有由當前作用域(即,全局作用域或函數或方法的作用域)給出的含義。你可以這樣做:

var obj = { 
    name : 'object', 
    itis : 'object' 
} 

或本:

function Obj() { 
    this.name = 'object'; 
    this.itis = this.name; 
} 
var obj = new Obj(); 

但你試圖將無法正常工作的。下面是行動問題的例子:

function Foo() { 
    this.name = "My function"; 

    var obj = { 
     name : 'My literal object', 
     itis : this.name 
    } 

    alert(obj.itis); // "My function" 
} 
Foo(); 

警報顯示My function因爲this中的Foo範圍定義; obj沒有自己的範圍。

0

this即使您在一個內部使用該關鍵字,關鍵字也不會引用該對象。它只是指啓動當前範圍的東西。

0

this指對象obj當你在函數傳遞this

var obj = { 
    name : 'object', 
    itis : function(){ 
    return this.name; 
    } 
} 
obj.itis();//'object' 
2

代碼

var obj = { name: 'object'; 
      itis: this.name }; 

是完全等效於

var obj = {}; 
obj.name = 'object'; 
obj.itis = this.name; 

換句話說this參考當前外部範圍的this,與新創建的對象無關。

事情是不同與

var obj = {}; 
obj.name = 'object'; 
obj.itisf = function(){ return this.name; } 

console.log(obj.itisf()); // Shows "object" 

,它是因爲this執行功能後,將成爲對象。

一個簡單的合理化是,當您使用.從對象中獲取函數後,該函數中的this將成爲對象。該規則還暗示在Javascript:

obj.f(); 

var ff = obj.f; 
ff(); 

只在代碼中f執行做同樣的事情,因爲在第一種情況下的this值將成爲對象。在第二種情況下,而不是this將成爲全局對象。

0

'this'關鍵字是指當前的作用域,在你的情況下,你在對象字面聲明中使用'this',我想,'this'是指'Window'對象。

如果我們看到語法明智,就不會有錯誤。但在運行時它將是'未定義'。看看下面的例子

var xyz = { 
 
    
 
    a: 10, 
 
    b: 20, 
 
    c: this.a + this.b 
 
    
 
}; 
 
document.write(xyz.a," and ",xyz.b); 
 
document.write(xyz.c); 
 
// to cross check 
 
document.write(Window.a + Window.b); 
 
// Why NaN ? 
 
document.write(undefined + undefined);