要修改屬性預設的特性,必須使用ecamscript 5的 object.defineproperty() 方法。
例如:
var person ={};object.defineproperty(
person,'name',
);console.log(person.name);
//tom
person.name = 'join';
console.log(person.name);
//tom
這個例子建立了乙個名為name的屬性,他的值為tom是唯讀的。這個屬性的值是不可以修改的,如果嘗試為他指定新值,在非嚴格模式下,賦值操作將被忽略,在嚴格模式下,賦值操作將會導致丟擲錯誤。
類似的規則也適用於不可配置的屬性。例如:
var person ={};object.definerroperty(person,'name',);
console.log(perso.name);
//tom
delete person.name;//
false
console.log(person.name);//
tom
可以多次呼叫object.defineproperty()方法修改同乙個屬性,但是把configurable特性設定為false之後就會有限制
呼叫這個方法的時候,如果不指定,configurable、enumerable 和writable特性的預設值都是false
訪問器屬性
訪問器屬性不包含資料值
他們包含一對getter和setter函式(不過,這兩個函式都不是必須的)
在讀取訪問器屬性的時候,會呼叫getter函式,這個函式複製返回有效的值。
在寫入訪問器屬性的時候,會呼叫setter函式,並傳入新值,這個函式負責決定如何處理資料。
訪問器屬性有如下四個特性
configurable
表示能否通過delete刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為資料屬性。
直接在物件時定義的屬性,這個特性的預設值為true
enumerable
保濕能否通過for-in迴圈返回屬性。
直接在物件上定義的屬性,這個特性的預設值為true
get
在讀取屬性時呼叫的函式
預設值為undefined
set
在寫入屬性時呼叫的函式
預設值為undefined
訪問器屬性不能直接定義。必須使用 object.defineproperty()來定義。
例子:
var book =object.defineproperty(book,'year',,
set:
function
(newvalue)
}});
book.year = 2005;
console.log(book.edition);
//2
關於 js 的訪問器屬性
訪問器屬性是為了解決 開關的保護是死板的,不靈活的,法用自定義規則保護屬性,注意 每個資料屬性的縮微物件中都包含四個屬性 訪問器屬性的 如下 建立乙個物件 var lilei 呼叫函式 object.defineproperties lilei,uage set function value els...
屬性訪問器
synthesize result 表示建立該屬性的訪問器,這樣就可以直接訪問result屬性。在沒有新增屬性訪問器的時候,在main中這樣實現 myclass myclass myclass alloc init myclass setresult hello myclass shixian 新增...
C 屬性訪問器
屬性定義 public class a public class b set 當我們例項化a時,系統在為例項化的物件分配記憶體空間時,會將name欄位的記憶體空間宣告為公有的。這意味著之後對name欄位的所有操作,都是直接操作記憶體空間中的name欄位 當我們例項化b時,系統會先將name的記憶體空...