0

ボタンをクリックすると Func2 が呼び出されます。ポップアップが表示されないのはなぜですか? 最初のアラートの後に、アラート アラート ("override1") とアラート ("override2") の両方を表示する必要がありますか?

// JavaScript Document
function person(name, surname) {
    this.name = "";
    this.surname = "";
    this.age = "11";
    this.setName(name);
    this.setSurname(surname);
    //alert('Person instantiated'); 
}
person.prototype.setName = function(name) {
    this.name = "Sir1" + name;
}
person.prototype.setSurname = function(surname) {
    this.surname = "-" + surname;
}
person.prototype.setAge = function(newAge) {
    this.age = newAge;
}
person.prototype.show = function() {
    alert("override1");
}
function employee(name, surname, company) {
    //if (arguments[0] === inheriting) return;
    person.call(this, name, surname); // -> override del costruttore
    //this.name = "Sir2"+name;
    this.company = company;
};
employee.prototype.show = function() {
    person.prototype.show;
    alert("override2");
}
function test2() {
    employee.prototype = new person();
    // correct the constructor pointer because it points to Person  
    employee.prototype.constructor = employee;
    // Crea un oggetto impiegato da persona
    impiegato = new employee("Antonio", "Di Maio", "Consuldimo");
    //impiegato.show();
    impiegato.show();
}​

ありがとう

4

2 に答える 2

1

全体をのインスタンスに置き換えtest2()ているため、以前に定義した関数をから継承した関数で上書きします。また、コードボックスによる回答で述べられているように、あなたはを呼び出しているのではなく、単に無効なコンテキストで評価しているだけであり、まったく効果がありません。employee.prototypepersonemployee.prototype.showpersonemployee.prototype.show()person.prototype.show()

プロトタイプで追加のメソッドを定義する前にemployee、の親を設定する必要があります。

employee.prototype = new person();
employee.prototype.constructor = employee;
employee.prototype.show = function() { ... }

また、親のメソッドを呼び出すときは、自分で正しいコンテキストを指定する必要があります。

person.prototype.show.call(this);
于 2012-07-30T15:06:55.963 に答える
0

employee.prototype.showメソッドを呼び出していない場合は、次のようにperson.prototype.show変更します。

employee.prototype.show = function() {
     person.prototype.show();  
     alert ("override2");
 }
于 2012-07-30T15:04:32.763 に答える