面向對象的程序設計
ECMA-262 把對象定義為:不必屬性的鳩合,其屬性能夠包括基礎值、對象或許函數。
明白對象
var person = new Object(); //建立對象
person.name = "Nicholas"; //增加屬性
person.age = 29;
person.job = "teacher";
person.sayName = function(){ //增加要領,this 示意當前作用域下的對象;this 示意new Objecy() 實例化出來的誰人對象;this 要放在一個作用域下,比方person.sayName()是person 下的要領,要領可用this 示意要領自身。
alert(this.name);
};
屬性範例
ECMAScript 中有兩種屬性:數據屬性和接見器屬性,它們不能在JavaScript 中直接接見,範例把它們放在了兩對[[]]中心,如:[[Enumerable]]。
數據屬性
數據屬性是包括一個數據值的屬性,在這個位置能夠讀取和寫入值。4個特徵[[Configurable]]
:示意可否經由過程delete
刪除屬性、可否修正屬性的特徵,可否把屬性修正為接見器屬性。默許true
。[[Enumerable]
:示意能經由過程for-in
輪迴返回屬性。默許true
。[[Writable]]
:示意可否修正屬性值。默許true
。[[Value]]
:包括這個屬性的數據值。默許undefined
。
例:
var person = {
name: "Nicholas" //[[Value]]的特徵將這裏設置為"Nicholas",對這個值的任何修正都講迴響反映在這裏。
};
要修正默許特徵,要運用Object.defineProperty()
要領。吸收三個參數:屬性地點的對象,屬性的名字和一個描述符對象。描述符對象必需是configurable
,enumerable
,writable
,value
。
例:
var person = {};
Object.defineProperty(person,"name",{ //person:屬性地點的對象;name:屬性名;花括號內是描述符對象
writable: false, //只讀形式,true寫入形式
value: "Nicholas"
});
person.name = "zhangsan";
alert(person.name); //打印"Nicholas" 由於這邊是只讀形式
在挪用Object.defineProperty()
時假如不指定configurable
,enumerable
,writable
,默許都是false
。
接見器屬性
接見器屬性不包括數據值,它們包括一對getter
和setter
函數。getter
:讀取接見器屬性挪用setter
:寫入接見器屬性挪用
4個特徵:[[Configurable]]
:示意可否經由過程delete
刪除屬性、可否修正屬性的特徵,可否把屬性修正為接見器屬性。默許true
。[[Enumerable]
:示意能經由過程for-in
輪迴返回屬性。默許true
。[[getter]]
:讀取接見器屬性挪用,默許undefined
。[[setter]]
:寫入接見器屬性挪用,默許undefined
。