2013-07-25 58 views
0

我做一個原型繼承方法的測試..我得到一個錯誤,即使我複製的情況下把現有的對象...JavaScript的原型拋出錯誤作爲「對象的翻譯:有沒有方法」

這裏有什麼問題..

我的測試:

var human = function(name){ 
    this.name = name; 
} 

human.prototype.say = function(){ 
    alert(this.name); 
} 

var male = function(gender){ 
    this.gender = gender; 
} 

male.prototype.Gender = function(){ 
    alert(this.gender); 
} 

var inst1 = new human('nw louies'); 
inst1.say(); 

var inst2 = new male("male"); 
inst2.prototype = new human("sa loues philippe"); //i am copying the instance of human 
inst2.Gender(); 
inst2.say(); // throw the error as "undefined" 

這裏有什麼問題..任何一個可以幫助我理解我的錯誤?

live demo here

回答

1

你需要說

var male = function(gender){ 
    this.gender = gender; 
} 

male.prototype = new human(); 

不要忘記,你還需要設置男性對象的name財產。例如,您可以在human上公開setName方法,並在male構造函數中調用該方法。

+0

可以請你更新我的jsfiddle得到更多的理解嗎? – 3gwebtrain

+0

看一看這個:http://jsfiddle.net/4WDxR/2/ 我希望這對你有一些幫助,隨時提出相反的要求 –

0

原型屬性僅在構造函數/函數上定義。所以......

var obj = { a: 10 }; 
obj.prototype = { b : 20 }; // Wont't work 

obj.constructor.prototype.say = function(){ 
    alert("Hello"); 
} 

obj.say(); // Works. 

我希望你明白

相關問題