高程 6 1理解物件自讀

2021-07-27 04:12:26 字數 3892 閱讀 8709

物件擁有屬性,

資料屬性訪問器屬性

資料屬性

資料屬性包含資料值:value

資料屬性的特徵(用來描述資料屬性的行為):

[[configurable]]:

- 能否通過delete 刪除屬性從而重新定義屬性

- 能否修改屬性的特性

- 能否把屬性修改為訪問器屬性

[[enumerable]]

-表示能否通過for-in 迴圈返回屬性

[[writable]]

-能否修改屬性的

[[value]]

-包含這個屬性的資料值,是屬性的讀寫位置 預設undefined

修改特徵:

需要使用object.defineproperty()方法: —-(es5)

object.defineproperty(obj,」name」,{描述符物件})

var person = {};

object.defineproperty(person, "name", );

alert(person.name); //"nicholas"

person.name = "greg";

alert(person.name); //"nicholas"

/*高程** datapropertie***ample01.htm 【p140】*/

var person = {};

object.defineproperty(person, "name", );

//丟擲錯誤

object.defineproperty(person, "name", );

/*在呼叫object.defineproperty()方法時,如果不指定,configurable、enumerable 和writable 特性的預設值都是false*/

/*直接在物件上設定屬性時三個預設值都是true*/

ie8 是第乙個實現object.defineproperty()方法的瀏覽器版本。然而,這個

版本的實現存在諸多限制:只能在dom物件上使用這個方法,而且只能建立訪問器

屬性。由於實現不徹底,建議讀者不要在ie8 中使用object.defineproperty()

方法。———————————————————-高程【p141】

訪問器屬性

訪問器屬性不包含資料值: (沒有value

讀:getter()函式

寫:setter()函式

訪問器屬性的特徵:

[[configurable]]:

- 能否通過delete 刪除屬性從而重新定義屬性

- 能否修改屬性的特性

- 能否把屬性修改為資料屬性 (對比資料屬性的特徵)

- 預設為ture

[[enumerable]]

-表示能否通過for-in 迴圈返回屬性 直接在物件上定義的屬性,這

個特性的預設值為true。

[[get]]

-讀取屬性 預設undefined

[[set]]

-設定屬性 預設undefined

使用object.defineproperty()來定義

var book = ;

object.defineproperty(book, "year", ,

set: function

(newvalue)

}});book.year = 2005;

alert(book.edition); //2

//高程----accessorpropertie***ample01.htm【p141】

支援ecmascript 5 的這個方法的瀏覽器有ie9+(ie8 只是部分實現)、firefox 4+、safari 5+、opera12+ 和chrome 。

在這個方法之前, 要建立訪問器屬性, 一般都使用兩個非標準的方法:_definegetter_()和_definesetter_()。這兩個方法最初是由firefox 引入的,後來safari 3、 chrome 1 和opera 9.5 也給出了相同的實現。

var book = ;

//定義訪問器的舊有方法

book.__definegetter__("year", function

());

book.__definesetter__("year", function

(newvalue)

});book.year = 2005;

alert(book.edition); //2

object.defineproperties()方法。

var book = {};

object.defineproperties(book, ,

edition: ,

year: ,

set: function

(newvalue)}}

});

object.getownpropertydescriptor()方法

收兩個引數:

屬性所在的物件

要讀取其描述符的屬性名稱。

返回值:是乙個物件

如果是 訪問器屬性,

屬性有configurable、enumerable、get 和set;

如果是 資料屬性,

屬性有configurable、enumerable、writable 和value

var book = {};

object.defineproperties(book, ,

edition: ,

year: ,

set: function

(newvalue) }}

});var descriptor = object.getownpropertydescriptor(book, "_year");//獲取描述符物件

alert(descriptor.value); //2004

alert(descriptor.configurable); //false

alert(typeof descriptor.get); //"undefined"

var descriptor = object.getownpropertydescriptor(book, "year");

alert(descriptor.value); //undefined

alert(descriptor.enumerable); //false

alert(typeof descriptor.get); //"function"

object.getownpropertydescriptor()方法

js之建立物件(摘自高程)

工廠模式 function factorial name,age return o var result factorial lily 25 result.sayname 缺點 沒有解決物件識別問題,即無法知道物件的型別 建構函式模式 function person name,age var obj...

6 1 物件拷貝

基礎語法 extend deep target,object1,objectn 1.deep true是深拷貝 預設false 淺拷貝 2.target 要拷貝的目標物件 3.object1 待拷貝的 第乙個物件 4.objectn 待拷貝的 第n個物件 一 深拷貝 深度拷貝 完全轉殖 是兩個不同的...

對於自加自減的理解

前言 c語言中很多地方都會用自加 自減 運算子來參與一些運算,這也是c語言的主要特色之一,如果可以掌握並合理的利用這一特性,可以優化我們的c程式。而自加自減也是對於剛接觸c語言程式設計的人來說,比較難想通,很容易造成錯誤,可是考試的卷子也經常出現類似的題目。自增自減的定義 自增 使變數的值加1 自減...