2017-03-13 83 views
-3

任何人都可以請幫助我。我正在嘗試與多重繼承相處。但我的代碼不工作,因爲我的對象obja不知道sayhello()。javascript繼承與'that'

它是importent該線

VAR那=新InputModule();

已包含在內。但我不知道如何解決它。

var InputModule = function(title, type){ 


    var that = this; 

    that.title = title; 
    that.type = type; 
    that.return = null; 

    that.sayHello = function(){ 
     console.log("Hello! I'm " + that.title + " and I'm an " + that.type + "Module!"); 
    } 

} 

var IntModule = function(){ 

    var that = new InputModule("newti", "int"); 

} 

var obja = new IntModule(); 
obja.sayHello(); 

編輯:

我想的是,IntModul是InputModul可以使用該功能的SayHello();. 我的同事說我sholudn't使用原型,並應該使用行「var that = new InputModule」。 比我創建一個新的Modul,它是一個IntModul並且也可以使用sayhello(),因爲它是一個InputModul。但是還有其他一些類似LetterModul的Modul也應該從InputModul繼承。 我希望這是有道理的。我很沮喪......

+1

在這段代碼中沒有理由需要指定= this。 – Cruiser

+1

如果你能解釋你希望你的代碼做什麼,這將有所幫助。你說這條線是「重要的」:爲什麼?它實際上沒有做任何事情。 – Pointy

+3

多繼承?你的例子甚至不顯示單一繼承。另外'return'是一個關鍵字。 – kay

回答

1

我認爲你想要做的是一個簡單的繼承層次結構。如果你試圖做到多重繼承,那麼你的運氣不好,因爲Javascript的原型繼承模型只允許一個對象擁有一個原型對象。你需要使用mixin技術來獲得更近的東西。

你也許可以得到你想要的東西這樣的行爲:

var IntModule = function() { 
    InputModule.call(this, "newte", "int"); 
} 

如果您在使用JS繼承意圖,不過,你可能看ES2015 class syntax其中, - 同時不改變下-the-covers行爲 - 相當多地簡化了語法。

在您的代碼中,中沒有任何理由that,儘管它沒有任何傷害。但在IntModule中,您可以使用它創建一個新對象,而不是修改您嘗試創建的對象。然後你對對象that不做任何事情。

0

如果有人在這裏進行討論,我是如何解決它的: 這不是直接繼承。但工作方式相同,並且(對我來說) 比使用原型更清晰。 您可以構建實例並在最後使用JQuery對其進行擴展。

$.extend(true,this,that);

您剛剛與其他實例進行擴展。

也許我描述了我的問題不正確。但是,這令人興奮,我正在尋找。