2012-11-09 50 views
0

所以我想以某種方式「繼承」參數,我碰到使用當使用function.apply的參數(這一點,參數)爲了得到混合

function.apply(this, arguments)

來了,它做的工作...大部分都是。我得到的是,當我從父對象調用一個函數時,父函數的參數在其他函數前面得到,當我從繼承器調用一個函數時,它們不會。

這裏是我的代碼:

function Human(name, gender, tel, address){ 
    this.name = name; 
    this.gender = gender; 
    this.address = address; 
    this.tel = tel; 
} 

Human.prototype.introduce = function(){ 
    console.log("Hi I'm " + this.name + " a " + this.gender + " from " + this.address + 
    ". My number is " + this.tel); 
} 

    Student.prototype = new Human; 
    Student.prototype.constructor = Student; 


function Student(school,marks){ 
    Human.apply(this, arguments); 
    this.school = school; 
    this.marks = marks; 

} 

Student.prototype.average = function(){ 
    this.total = 0; 
    this.average = 0; 
    this.markslength = this.marks.length; 
    for(var i = 0; i<this.markslength; i++){ 
     this.total = this.total + this.marks[i] 
    } 
    this.average = (this.total)/(this.markslength); 

    var marks3 = [6,6,2] 
    var Nasko = new Student('Nasko', 'Male', 14421687, 'Sofia', 'FELS', marks3); 

當我做:console.log(Nasko.name);這是確定的。 但是當我做console.log(Nasko.average());它給我NaN。 所以我的問題是 - 如何實際'修復'它

對不起,如果我問了一個已經問過的問題,但我真的不知道如何問它在任何短的重定向到另一個類似的職位將受歡迎。提前致謝。

+0

您是否期待'new'的前四個參數應用於'Human',最後兩個參數是'Student'? – pimvdb

+0

是的,這就是我想要做的。 –

回答

1

您正在使用前兩個參數爲學校,並標記實際名稱和性別。

您可以使用參數讀取最後的值

function Student(){ 
    Human.apply(this, arguments); 
    var len = arguments.length; 
    this.school = arguments[arguments.length-2]; // second last argument is school 
    this.marks = arguments[arguments.length-1]; // last argument is mark. 

} 
+0

謝謝你做到了,聽起來合乎邏輯,只是不知道我可以使用它。 –

+0

這會起作用,但以這種方式保留參數名稱會令人困惑。擴展「人」簽名會更有意義。 – pimvdb

+0

是的,我想到了,但學生課只有學校和標記,因爲還有其他人類 - 他們不應該。 –

1

的命名在"Student"構造"school""marks"將「Nasko」和「男」兩個參數,並在您傳遞的"Human"類值「 Nasko「作爲"name"和」男性「作爲"gender"。我認爲你有點混淆了適用和傳遞參數。當然,初始化後,代碼標記是一個字符串值「Male」,你不能得到平均結果。

希望它有幫助。

乾杯

+0

是的,我意識到究竟發生了什麼只是不知道如何解決它。不管怎麼說,還是要謝謝你。 –

+0

「呼叫」和「應用」功能之間的唯一區別是您傳遞給它們的參數。我應該看看「通話」功能。它更靜態,但易於閱讀和理解。歡呼聲 – Rikki

+0

謝謝你,會看到它。 –

相關問題