物件擁有屬性,
資料屬性和訪問器屬性
資料屬性
資料屬性包含資料值: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]]:使用object.defineproperty()來定義- 能否通過delete 刪除屬性從而重新定義屬性
- 能否修改屬性的特性
- 能否把屬性修改為資料屬性 (對比資料屬性的特徵)
- 預設為ture
[[enumerable]]
-表示能否通過for-in 迴圈返回屬性 直接在物件上定義的屬性,這
個特性的預設值為true。
[[get]]
-讀取屬性 預設undefined
[[set]]
-設定屬性 預設undefined
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 自減...