8

私はクラス/関数/プロトタイプの継承で少し遊んでいて、適切なセットアップが機能するようになりました。私が理解している簡単なこと。

http://jsfiddle.net/rudiedirkx/rwPeD/6/

デバッグの目的で、各コンストラクターで、そのコンストラクターを呼び出しているオブジェクトの種類を出力したいと考えました。たとえば、Ronin コンストラクターは Ninja コンストラクターを呼び出し、Ninja コンストラクターは Person コンストラクターを呼び出します。そのために私はget_class関数を作りました:

function get_class(obj) {
    var C = String(obj.__proto__.constructor);
    return C.match(/function (\w+)\(/, C)[1];
}

そしてそれはうまくいきません。常に「Person」を返します。なんで?すべての「クラス」には独自のコンストラクタがありますね。すべてのコンストラクターでa を実行するconsole.log(this)と、Chrome Devtools はオブジェクトの型を認識します。どうすればそこにたどり着くことができますか (バニラ JS を使用)?

PS。私のChromeでの完全な出力:

Chrome Devtools の出力

4

2 に答える 2

6

または、実際に機能する何かを行うことができます...

function getClass(obj) {
    return obj.__proto__.constructor.name;
}

obj.attr("class") は、メソッド attr が存在する場合にのみ機能し、ネイティブ環境では機能しません。

それでも、あなたの提案はそのデザインにおいて非常に優れていました。

クラスが Array、String、RegExp、Error などのネイティブ クラスでない場合、proto .constructor.name は常に「Object」を返すことに注意してください。「name」プロパティが返されるように説得する方法を誰かが知っている場合本当の名前、それを行うためにコードを追加する必要があるとしても、私は彼/彼女のトラブルのためにバナナを買うでしょう.

于 2012-07-18T08:03:29.663 に答える