2013-04-15 149 views
0

我想了解繼承在JavaScript執行Javascript繼承

function baseClass(name) { 
    this.name = name; 
    this.getName = function() { 
     return this.name; 
    } 
} 



function subClass(id, company){ 
     baseClass.call(this); 
     this.id = id; 
     this.company = company; 
     this.toString = function() { 
      return name + "\n" + this.id + "\n" + this.company; 
     } 
    } 



subClass.prototype = Object.create(baseClass); 
    var s = new subClass(); 
    s.toString(); //here the name property from the baseClass is not displayed. 

如何正確地實現繼承(經典/原型)

+0

45分鐘前[可能重複](http://stackoverflow.com/questions/16020577/proper-prototypal-inheritance)。此外,忘了古典,因爲EcmaScript(javascript)是一種原型語言。 – GitaarLAB

+0

「古典/原型」 - 你是指哪一個? – Pointy

+0

沒有_classical_,因爲JavaScript是**原型**語言...... – War10ck

回答

3

首先,有兩個小問題:

如何正確地實現繼承

移動的方法(其中唐在原型對象上不需要特權,在構造函數作用域中沒有局部變量)。並讓SubClass.prototype繼承自BaseClass.prototype,而不是從BaseClass函數繼承。

function BaseClass(name) { 
    this.name = name; 
} 
BaseClass.prototype.getName = function() { 
    return this.name; 
}; 

function SubClass(id, company){ 
    BaseClass.call(this); 
    this.id = id; 
    this.company = company; 
} 
SubClass.prototype = Object.create(BaseClass.prototype); 
SubClass.prototype.toString = function() { 
    return this.name + "\n" + this.id + "\n" + this.company; 
}; 

new SubClass().toString()不從基類

你調用不帶任何參數的構造顯示的名稱屬性。 id,companyname屬性將具有undefined值。此外,您的​​甚至沒有name的參數,並且它不會將任何內容傳遞給BaseClass構造函數調用。

+1

var s = new SubClass()'也需要小寫爲'var s = new subClass()' –

+0

@DavidTansey:謝謝,我在下面編輯它:-) – Bergi