2013-01-06 37 views
0

我想通過原型繼承一​​個函數,它似乎都是正確的(根據我),但我得到錯誤...任何人都可以幫助我理解這個問題?'原型'拋出TypeError:info是undefined

功能:

(function($){ 
    var Man = function(info){ 
     this.name = info.name; 
     this.age = info.age; 
     this.work = info.work; 
    } 

    Man.prototype.tell = function(){ 
     return 'I am Mr.' + this.name; 
    } 

    var Dog = function(info){ 
     Man.call(this,info); 
    } 

    Dog.prototype = new Man(); 

    var dog1 = new Dog({name:'Dobber',age:3,work:'roming'}); 
    console.log(dog1.tell()); 

})($); 

錯誤我得到:

TypeError: info is undefined 

回答

6

當你調用new Man()建立Dog原型,你不能傳遞一個參數。函數期望一個(這就是info應該是)。

我不知道如何糾正它,因爲該代碼中的設置沒有多大意義。

編輯 —也許只是讓Man構造檢查參數:

function Man(info) { 
    if (info !== undefined) { 
    this.name = info.name; 
    this.age = info.age; 
    this.work = info.work; 
    } 
} 
+0

什麼,如果條件究竟在這裏做? – 3gwebtrain

+0

@ 3gwebtrain它只是檢查參數是否實際傳遞給函數。這樣,當您通過調用「Man」而沒有「info」參數來設置「Dog」原型時,您不會得到異常。 – Pointy

+1

習慣性的修正是在設置繼承時不要調用構造函數。你用'Object.create'來做到這一點,如果需要的話可以添加一個墊片。 'Dog.prototype = Object.create(Man);' –

相關問題