0

だから私は何らかの方法でパラメータを「継承」しようとしていて、の使用に出くわしました

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が得られます。だから私の質問は - 実際にそれを「修正」する方法です

すでに尋ねられた質問をした場合は申し訳ありませんが、別の同様の投稿へのリダイレクトを歓迎します. 前もって感謝します。

4

2 に答える 2

1

コンストラクターで"school"andという名前の 2 つのパラメーターの値は"Nasko" と "Male" になり、クラスでは "Nasko"と "Male" をとして渡します。apply とそれに引数を渡すことで少し混乱していると思います。もちろん、コードマークを初期化した後は「男性」の文字列値であり、平均結果は得られません。"marks""Student""Human""name""gender"

それが役に立てば幸い。

乾杯

于 2012-11-09T22:00:11.853 に答える
1

学校と実際の名前と性別のマークの最初の 2 つの引数を使用しています。

引数を使用して最後の値を読み取ることができます

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.

}
于 2012-11-09T21:56:16.320 に答える