1. 程式人生 > >屬性訪問器

屬性訪問器

傳遞 tro 由於 num AR icon edit 過去 哈希表

轉載地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Property_Accessors

屬性訪問器提供了兩種方式用於訪問一個對象的屬性,它們分別是點號和方括號。

語法

object.property
object["property"]

描述

我們可以將對象看做是一個關聯數組,或映射,字典,哈希表,查找表。這個數組中的鍵就是這個對象中屬性的名稱。通常,當我們提及一個對象的屬性時,會對屬性與方法之間做個對比。然而,屬性與方法之間的區別並不大。一個方法就是一個可以被調用的屬性而已,例如一個指向Function實例的引用可以作為對象屬性的值。

訪問對象屬性有兩種方式:點號表示法和方括號表示法。

點號表示法

get = object.property;
object.property = set;

以上代碼中,property必須是一個有效的 JavaScript 標識符,例如,一串字母數字字符,也包括下劃線及美元符號,但不能以數字作為開頭。比如,object.$1是合法的,而 object.1是無效不合法的。

document.createElement(‘pre‘);

在上述代碼塊中,document中存在一個名為"createElement"的方法並且被調用了。

如果對數字字面量使用方法,並且數字文字沒有指數且沒有小數點,請在方法調用之前的點之前留出空格,以防止點被解釋為小數點。

77 .toExponential();
// or
77
.toExponential();
// or
(77).toExponential();
// or
77..toExponential();
// or
77.0.toExponential();
// because 77. === 77.0, no ambiguity

方括號表示法

get = object[property_name];
object[property_name] = set;

property_name 是一個字符串。該字符串不一定是一個合法的標識符;它可以是任意值,例如,"1foo","!bar!", 甚至是一個空格。

document[‘createElement‘](‘pre‘);

這裏的代碼的功能跟上一個列子的作用是相同的。

括號之前允許有空格。

document [‘createElement‘](‘pre‘);

屬性名

屬性名必須是字符串。這意味著非字符串對象不能用來作為一個對象屬性的鍵。任何非字符串對象,包括number,可通過toString方法,類型轉換成一個字符串。

var object = {};
object[‘1‘] = ‘value‘;
console.log(object[1]);

上述代碼的輸出為"value",因為1被類型轉換為‘1‘。

var foo = {unique_prop: 1}, bar = {unique_prop: 2}, object = {};
object[foo] = ‘value‘;
console.log(object[bar]);

[]操作符都會默認調用toString方法

[foo]被轉化為[Object object]字符串

上述的代碼的輸出也是"value",由於對象foo和bar 都會被轉成相同的字符串。在SpiderMonkey JavaScript 引擎中,這個字符串將會是"[‘object Object‘]"。

方法綁定

一個方法沒有綁定到對象上,那就意味著這個方法是不起作用的。特別要註意的是,在一個方法中this對象並不是固定的,例如,this不需要指向包含當前方法的對象。this可通過函數調用被傳遞過去的值所替換。詳見方法綁定。

註意eval

JavaScript新手在使用eval時會犯錯,在那些可通過括號表示法替換的場景下。例如,下面的語法經常在很多代碼中找到。

x = eval(‘document.forms.form_name.elements.‘ + strFormControl + ‘.value‘);

eval的性能較差,在任何時候都應該避免使用。而且,此時strFormControl必須是一個合法的標識符, 這在一些names、IDs表單控件中並不是必要的。所以,最好是使用括號來代替:

x = document.forms["form_name"].elements[strFormControl].value;

屬性訪問器