-1

John Resigのクラス継承実装(javascript)の上にシステムを構築しています

検査/デバッグの目的で(そしておそらく後でタイプチェックするために、インスタンス化されたクラスの実際の名前を処理したいという事実を除いて、すべてがうまく機能します。

例:ジョンの例に従って、のNinja代わりに戻りますClass

この名前の由来は承知していthis.__proto__.constructor.nameますが、この小道具は読み取り専用です。サブクラス自体の初期化の一部である必要があると思います。

誰?

4

1 に答える 1

0

コードをよく見ると、次のような2行が表示されます。

Foo.prototype = new ParentClass;//makes subclass
Foo.prototype.constructor = Foo;

2行目を省略した場合、コンストラクター名は親クラスの名前になります。nameプロパティは読み取り専用である可能性がありますが、prototypeそうではなく、constructorプロトタイプのプロパティでもありません。このようにして、 「クラス」 /コンストラクターの名前を設定できます。

__proto__また、これはオブジェクトのプロトタイプを取得する方法ではないことに注意してください。このスニペットを最適に使用します。

var protoOf = Object && Object.getPrototypeOf ? Object.getPrototypeOf(obj) : obj.prototype;
//obviously followed by:
console.log(protoOf.constructor.name);
//or:
protoOf.addProtoMethod = function(){};//it's an object, thus protoOf references it
//or if all you're after is the constructor name of an instance:
console.log(someInstance.constructor.name);//will check prototype automatically

本当にそれと同じくらい簡単です。

于 2013-03-02T13:54:12.287 に答える