2

オブジェクトのインスタンス化に使用される実際に呼び出された関数を取得する方法はありますか?

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

function B(){}
B.prototype = Object.create(A.prototype);

B.prototype.test = function(){};

var x = new B();
alert(x.constructor);   // alerts "A"

クロスブラウザのサポートにも興味があります

ありがとう

4

1 に答える 1

1

この種の継承の後、「サブクラス」のコンストラクターを明示的に設定する必要があります。

...
B.prototype = Object.create(A.prototype);
B.prototype.constructor = B;
...

私の知る限り、これを自動的に行う方法はありません。Google の Closure ライブラリでさえ、このようなものを持っています。

var inherit = function(subClass, superClass) {
    var temp = function() {};
    temp.prototype = superClass.prototype;
    subClass._super = superClass.prototype;
    subClass.prototype = new temp();

    subClass.prototype.constructor = subClass;
};   

したがって、引数を持つコンストラクターがある場合は、次のような単純なことができます

var ParentClass = function(arg1, arg2) {
    this.arg1 = arg1;
    this.arg2 = arg2;
};

ParentClass.prototype.show = function() {
    console.log('Parent!');
    console.log('arg1: ' + this.arg1);
    console.log('arg2: ' + this.arg2);
};

var ChildClass = function(arg1, arg2, arg3) {
    ParentClass.call(this, arg1, arg2);
    this.arg3 = arg3;
};

inherit(ChildClass, ParentClass);

ChildClass.prototype.show = function() {
    console.log('Child!');
    console.log('arg1: ' + this.arg1);
    console.log('arg2: ' + this.arg2);
    console.log('arg3: ' + this.arg3);
};

于 2013-01-03T10:58:11.790 に答える