2013-04-04 111 views
0

考慮下面的代碼:的JavaScript訪問對象

<script> 
    person={ 
      firstname:"John", 
      lastname:function(){alert(this.firstname)} 
     } 
      person.lastname(); 
</script> 

局部變量一樣,可以從任何地方在函數內被訪問,訪問對象的屬性,我們爲什麼要使用這個關鍵字,因爲我們是內?該對象是否使用這個關鍵字強制?

+0

是,除非你想用person.firstname – mplungjan 2013-04-04 06:29:32

回答

2

這是因爲在JavaScript中,當您使用firstname,解釋正在尋找在當前範圍是可變的,後來,在所有父作用域。但對象不構成範圍。

因此,您需要通過特殊變量 - this訪問firstname

提示:功能是創建範圍,等等例如:

var person = function() { 
    var firstname = "John"; 

    return { 
     lastname: function() { 
      alert(firstname) 
     } 
    }; 
}(); 

沒有this會工作。相對於其他語言在JavaScript

2

this關鍵字是有些不同。在當前作用域中綁定到this的對象由當前函數的調用方式決定,它不能在執行過程中通過賦值來設置,並且每次調用該函數時都可能會有所不同!

var person1 = { 
    firstname: "John", 
    lastname: function() { alert(this.firstname) } 
} 

var person2 = { 
    firstname: "James", 
} 
person2.lastname = person1.lastname.bind(person2); 

var firstname = "Rick"; 

簡單的呼叫:

person1.lastname(); // "John" 

語境變化呼叫:

person1.lastname.call(window); // "Rick" 

約束函數調用:

person2.lastname(); // "James" 

this也表現不同的prototype chainDOM event handlers