2013-05-16 35 views
1

我有以下代碼,並且遇到了call和prototype.constructor方法,但沒有足夠的知識使它們正常工作。有人可以填寫我缺少的知識嗎?這裏的管理員是用戶。我如何讓一個Javascript類成爲另一個類的孩子

function User(user) { 
     this.id = user.id; 
     this.email = user.email; 
     this.firstname = user.firstname; 
     this.lastname = user.lastname; 
     this.age = user.age; 
    }  

    User.prototype.fullName = function(){ 
     return this.firstname + ' ' + this.lastname 
    } 

    function Admin(admin){ 
     this.writer = admin.writer; 
     this.editor = admin.editor; 
     this.publisher = admin.publisher; 
     //User.call(this); 
    } 

    Admin.prototype.fullAccess = function(){ 
     return (this.writer && this.editor && this.publisher); 
    } 

    //Admin.prototype = new User(); 
    //Admin.prototype.constructor = Admin; 

    var user1 = new User({ 
     'id': 1, 
     'email': '[email protected]', 
     'firstname': 'Stephen', 
     'lastname': 'Brown', 
     'age': 44 
    }); 

    var user2 = new User({ 
     'id': 2, 
     'email': '[email protected]', 
     'firstname': 'John', 
     'lastname': 'Doe', 
     'age': 25 
    }); 

    var admin1 = new Admin({ 
     'writer': true, 
     'editor': true, 
     'publisher': true, 
    }); 

    var admin2 = new Admin({ 
     'writer': true, 
     'editor': true, 
     'publisher': false, 
    });  
+1

[參考鏈接](http://alexsexton.com/blog/2013/04/understanding-javascript-inheritance/) –

回答

2

你是幾乎沒有,它與一些簡單的更改:

  1. 取消註釋您的註釋行
  2. 變化User.call(this);User.call(this, admin);。這會將傳遞給Admin構造函數的參數傳遞給「超級」構造函數。
  3. Admin.prototype = new User();更改爲Admin.prototype = new User({});(傳遞一個空對象,否則User構造函數將嘗試訪問未定義的屬性時會拋出錯誤)。或者僅使用Admin.prototype = Object.create(User.prototype);(IE < = 8所需的填充)。

http://jsfiddle.net/P6ADX/

+1

請查看我如何消除與需求問題通過'默認'來創建一個原型對象:http://metadea.de/V/ – metadings

+0

這很棒,它的工作接近。唯一的是我得到的錯誤 - TypeError:當我嘗試訪問它時,admin1.fullAccess不是一個函數。 –

+0

切換周圍的線似乎已修復它.... 'Admin.prototype = new User({}); Admin.prototype.constructor = Admin; \t \t Admin.prototype.fullAccess = function(){ return(this.writer && this.editor && this.publisher); }' –

相關問題