9.1 Constructor(構造器)模式(1 / 2)

在經典麵向對象編程語言中,Constructor是一種在內存已分配給該對象的情況下,用於初始化新創建對象的特殊方法。在JavaScript中,幾乎所有東西都是對象,我們通常最感興趣的是object構造器。

Object構造器用於創建特定類型的對象—準備好對象以備使用,同時接收構造器可以使用的參數,以在第一次創建對象時,設置成員屬性和方法的值(見圖9-1)。

圖9-1 Constructor(構造器)模式

9.1.1 對象創建

在JavaScript中,創建新對象的兩種常用方法如下所示:

//下麵每種方式都將創建一個新的空對象var newObject = {};

// object構造器的簡潔記法

var newObject = new Object();

在Object構造器為特定的值創建對象封裝,或者沒有傳遞值時,它將創建一個空對象並返回它。

有四種方法可以將鍵值賦值給一個對象:

// ECMAScript 3兼容方式

// 1. “點”語法

// 設置屬性

newObject.someKey = "Hello World";

// 獲取屬性

var key = newObject.someKey;

// 2. 中括號語法

// 設置屬性

newObject["someKey"] = "Hello World";

// 獲取屬性

var key = newObject["someKey"];

// 隻適用ECMAScript 5 的方式

// 更多信息查看:http://kangax.github.com/es5-compat-table/// 3. Object.defineProperty

// 設置屬性

Object.defineProperty(newObject, "someKey", {

value: "for more control of the property's behavior",

writable: true,

enumerable: true,

configurable: true

});

// 如果上麵的看著麻煩,可以使用下麵的簡便方式

var defineProp = function (obj, key, value) {

config.value = value;

Object.defineProperty(obj, key, config);

};

// 使用上述方式,先創建一個空的person對象

var person = Object.create();

// 然後設置各個屬性

defineProp(person, "car", "Delorean");

defineProp(person, "dateOfBirth", "1981");

defineProp(person, "hasBeard", false);

//4.Object.defineProperties

// 設置屬性

Object.defineProperties(newObject, {

value: "Hello World",

writable: true

},

"anotherKey": {

value: "Foo bar",

writable: false

}

});

// 可以用1和2中獲取屬性的方式獲取3和4方式中的屬性"someKey": {

正如我們將在本書稍後看到的,這些方法甚至可以用於繼承,如下所示:

// 用法