1

親メソッドを呼び出します。実装方法は?

 function Ch() {
        this.year = function (n) {
            return n
        }
    }

    function Pant() {
        this.name = 'Kelli';
        this.year = function (n) {
            return 5 + n
        }
    }

//拡張します

 Pant.prototype = new Ch();
    Pant.prototype.constructor = Pant;
    pant = new Pant();
    alert(pant.name); //Kelli
    alert(pant.year(5)) //10

親メソッドを呼び出す方法

this.year = function (n) {
            return 5 + n
        } 

よろしくお願いします。

4

4 に答える 4

1

Googleのクロージャーライブラリが継承を実装する方法は次のとおりです。

goog.inherits = function(childCtor, parentCtor) {
  function tempCtor() {};
  tempCtor.prototype = parentCtor.prototype;
  childCtor.superClass_ = parentCtor.prototype;
  childCtor.prototype = new tempCtor();
  childCtor.prototype.constructor = childCtor;
};

コードは次のようになります。

function Ch() {}
Ch.prototype.year = 
function (n) {
   return n
}

function Pant() {}
goog.inherits(Pant,Ch);
Pant.prototype.name = 'Kelli';
Pant.prototype.year = function (n) {
   return 5 + Pant.superClass_.year.call(this, n);//Call the parent class
}

pant = new Pant();
alert(pant.name); //Kelli
alert(pant.year(5)) //10

もちろん、必要に応じてgoog.inherits関数の名前を変更することもできます。

于 2012-11-08T20:53:36.730 に答える
1

を使用して、オーバーライドされた夕食クラス (親) メソッドを呼び出すことができます__proto__が、IE ではサポートされていません。

alert(pant.__proto__.year(5)) //5
于 2012-11-08T20:50:30.970 に答える
1

この回答をコードに適合させる:

function Ch() {
    this.year = function(n) {
        return n;
    }
}

function Pant() {
    Ch.call(this); // make this Pant also a Ch instance
    this.name = 'Kelli';
    var oldyear = this.year;
    this.year = function (n) {
        return 5 + oldyear(n);
    };
}
// Let Pant inherit from Ch
Pant.prototype = Object.create(Ch.prototype, {constructor:{value:Pant}});

var pant = new Pant();
alert(pant.name); // Kelli
alert(pant.year(5)) // 10
于 2012-11-08T20:58:34.830 に答える
1

まず第一に、Chが「子」Pant用であり、「親」用であると仮定すると、逆方向に実行しているため、非常に混乱します。あなたが言う時

Pant.prototype = new Ch();

Pantから継承していますCh。それが本当にあなたの言いたいことであり、 を返すメソッドではnなく、を返すメソッドを呼び出したいと思いますn + 5。だからあなたはこれを行うことができます:

function Ch() {
    this.year = function (n) {
        return n;
    }
}

function Pant() {
    this.name = 'Kelli';
    this.year = function (n) {
        return 5 + n;
    }
}

Pant.prototype = new Ch();
Pant.prototype.constructor = Pant;
pant = new Pant();
alert(pant.name); //Kelli
alert(pant.year(5)) //10

// Is the below what you need?
alert(Pant.prototype.year(5)); // 5

http://jsfiddle.net/JNn5K/

于 2012-11-08T21:12:16.723 に答える