關於訪問器屬性

2022-05-06 09:21:09 字數 1635 閱讀 7006

要修改屬性預設的特性,必須使用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的記憶體空...