2017-01-10 103 views
0

我是新來的和新的Javascript。當我將值輸出到控制檯時,我遇到了一個奇怪的問題。據我所知,在這兩種情況下,名稱和顏色是訪問它們的對象車的屬性,我們需要使用this.propertyName或object.propertyName,但是當我將這些值輸出到控制檯而不使用此對象或對象時名稱,第一個console.log返回一個空字符串,另一個返回未捕獲的引用錯誤。他們是否指向窗口對象?那麼在這兩種情況下,它應該返回一個未捕獲的參考,有人可以請澄清這一點..在此先感謝。 :)javascript變量返回奇怪的輸出

var car = { 
    name : "ford", 
    color:"red", 
    log : function(){ 

     console.log(name); 
     // outputs an empty string 

     console.log(color); 
     // Returns error (this.js:8 Uncaught ReferenceError: color is not defined) 

    } 
} 

car.log(); 
+1

變量'name'和'color'不要在你的範圍存在,所以JavaScript是看在外面的然後找到它們的全球範圍。你的'name'實際上是指'window.name'。 –

+0

@RocketHazmat謝謝 –

回答

4

嘗試console.log(this.name)console.log(this.color)

附加信息從MDN

當一個函數被調用作爲對象的方法,其它被設置爲 方法被調用的對象。

在下面的示例中,當被調用o.f(),函數 內部這勢必鄰對象。

來源:MDN

+0

我想你的意思是'this.color'。 –

+0

是的,謝謝@RocketHazmat。我修好了它。 –

2

你沒有得到的原因一個輸出name是瀏覽器有一個built-in global called nameReferenceError:這是當前窗口的名稱。但他們沒有一個名爲color的內置全局程序,所以你會得到這個錯誤。

要在對象上訪問namecolor當您使用car.log(),你會使用this.namethis.color

+0

這個全局'name'和'window.name'不一樣,是嗎?因爲如果我們在這個代碼中用window.name替換name,我們會得到未定義的。 –

+0

@MohitBhardwaj:是的,不,'window.name'不會是'undefined'(假設這是默認的'window'全局,而不是別的)。 –

+0

對不起,你是對的。它是'window.name',它可以控制空白字符串而不是'undefined'。謝謝:) –

0

是的,你是正確的都應該拋出未捕獲的參考,但稍候....

居然有上窗口屬性,它是...是啊...

所以實際上你安慰窗口的那個屬性..即window.name

..第二個就是正確的..未捕獲的參考