2

parentMethod()関数 B は A を拡張し、B 子関数オブジェクトのオブジェクトを呼び出したときに、親関数 A で B 関数名を取得する方法。

function A() {

    this.parentMethod = function() {
         //alert('display B function name');
    }
}

function B() {


}


B.prototype = new A();

var b = new B();  
b.parentMethod();
4

2 に答える 2

2

これを行う最も簡単な方法は次のとおりです。

function A() {

    this.parentMethod = function() {
         alert(this.constructor.name);
    }
}

function B() {

}


B.prototype = new A();  
B.prototype.constructor = B; //Add this line.

var b = new B();  
b.parentMethod();

これで、parentMethod を呼び出すと、B がコンストラクター名として表示されます。

于 2013-04-25T15:13:19.780 に答える
0

constructor正しい関数を指すようにプロパティを修正した場合(つまりB)

B.prototype.constructor = B;

次に、コンストラクター関数の名前にアクセスできます

this.parentMethod = function() {
     alert(this.constructor.name);
}

ただし、これFunction.name非標準のプロパティであり、すべてのブラウザーで機能するとは限りません。parentMethod別の方法として、関数名を使用してインスタンスにプロパティをオーバーライドまたは追加することにより、関数名をハードコーディングすることもできます。this.constructor達成しようとしていることに応じて、関数参照 ( ) を直接使用することもできます。


継承をセットアップするより良い方法は、Object.create [MDN]を使用して、子コンストラクター関数で親コンストラクター関数を呼び出すことです。

function A() {}

A.prototype.parentMethod = function() {};


function B() {
    A.call(this); // call parent constructor
}

B.prototype = Object.create(A.prototype); // establish inheritance
B.prototype.constructor = B;
于 2013-04-25T12:32:25.880 に答える