《JavaScript設計模式與開發實踐》——JavaScript中使用new關鍵字創建對象實例

舉個例子:

function Person( name ){
    this.name = name;
};
Person.prototype.getName = function(){
    return this.name;
};
var p1 = new Person();
console.log( Object.getPrototypeOf( p1 ) === Person.prototype ); // 輸出: true
  • JS中的對象都具有_proto_屬性
  • Function是特殊的對象,除了擁有_proto_屬性,還有特有的屬性——原型屬性(prototype),這個屬性是一個指針,指向一個對象,而這個對象的用途包含可以由特定類型的所有實例共享的屬性和方法

下圖爲對象之間的關係:

new關鍵字創建對象實例

模擬new關鍵字創建對象(這段代碼來自《JavaScript設計模式與開發實踐》):

var objectFactory = function() {
    /** 從 Object.prototype 上克隆一個空的對象 **/
    var obj = new Object(); 
    /** 取得外部傳入的構造器,本例中爲 Person **/
    var Constructor = [].shift.call(arguments);
    /** 讓 obj.__proto__ 指向 Person.prototype,取代原來的 Object.prototype **/
    obj.__proto__ = Constructor.prototype; 
    /** 借用外部傳入的構造器給 obj 設置屬性 **/
    var ret = Constructor.apply(obj, arguments);
    /** 確保構造器總是會返回一個對象 **/
    return typeof ret === 'object' ? ret : obj;      
};
var a = objectFactory( Person, 'Alex' );
console.log( a.name ); // 輸出: Alex
console.log( a.getName() ); // 輸出: Alex
console.log( Object.getPrototypeOf( a ) === Person.prototype ); // 輸出: true
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章