2015-10-09 165 views
2

我是一個JavaScript對象和原型的初學者,並試圖開發我的第一個「多級繼承」JS對象,出現了一個意外問題。 這是我的代碼:JavaScript對象繼承問題

var Utils = function() {}; 
Utils.prototype = { 
    sayHelloGeneral: function(){ 
     console.log('hello'); 
    } 
}; 

var FormTools = function() { 
    Utils.call(this); 
    this.fields = []; 
}; 
FormTools.prototype = Object.create(Utils.prototype); 
FormTools.prototype.constructor = FormTools; 
FormTools.prototype.sayHelloForm= function (fields) { 
    console.log('hello form'); 
}; 

function GroupManager(value) { 
    FormTools.call(this); 

    this.val = typeof values === 'undefined' ? 1 : value; 
}; 
GroupManager.prototype = Object.create(FormTools.prototype); 
GroupManager.prototype.constructor = GroupManager; 
GroupManager.prototype.helloGroupManager= function (givenValue) { 
    console.log('Hello group manager'); 
}; 

爲什麼當我嘗試打電話給部門經理,它打印只sayHelloGeneral功能?

var GM = new GroupManager; 

GM.sayHelloGeneral(); //->ok 
GM.helloGroupManager(); //--> ok 
GM.sayHelloForm(); //->sayHelloForm is not a function 
+0

http://jsfiddle.net/gvhmfoux/ –

+0

爲me..where做工精細的片段是你的'的SayHello()'? –

+1

對不起,它是'sayHelloGeneral'。修正:) –

回答

1

它似乎工作正常。見下面

var Utils = function() {}; 
 
Utils.prototype = { 
 
    sayHelloGeneral: function(){ 
 
     console.log('hello'); 
 
    } 
 
}; 
 

 
var FormTools = function() { 
 
    Utils.call(this); 
 
    this.fields = []; 
 
}; 
 
FormTools.prototype = Object.create(Utils.prototype); 
 
FormTools.prototype.constructor = FormTools; 
 
FormTools.prototype.sayHelloForm= function (fields) { 
 
    console.log('hello form'); 
 
}; 
 

 
function GroupManager(value) { 
 
    FormTools.call(this); 
 

 
    this.val = typeof values === 'undefined' ? 1 : value; 
 
}; 
 
GroupManager.prototype = Object.create(FormTools.prototype); 
 
GroupManager.prototype.constructor = GroupManager; 
 
GroupManager.prototype.helloGroupManager= function (givenValue) { 
 
    console.log('Hello group manager'); 
 
}; 
 

 

 
var GM = new GroupManager; 
 

 
//GM.sayhello(); //->ok---> should be sayHelloGeneral() 
 
GM.sayHelloGeneral(); 
 
GM.helloGroupManager(); //--> ok 
 
GM.sayHelloForm(); //->Works fine too

+0

謝謝你們!我意識到問題出在我的代碼 'FormTools.prototype.sayHelloForm'是'FormTools.prototypesayHelloForm'。 當然,上面只是一個例子,我的代碼比我愚蠢的例子要大得多:)非常感謝 –