0

私がやりたいのは、JavaScript で関数の名前を抽出することです。しばらく前にこれを機能させましたが、次のようになります。

MyObj = function myobj(){};

extend = function(obj){
    return /function (.+)\(/.exec(obj.constructor.toString())[1];
}

ここに面白いことがあります。このようにこのオブジェクトでプロトタイプを使用すると、すべて正常に動作します。

MyObj.prototype.a = function(){}
MyObj.prototype.b = function(){}

extend(MyObj);
//->'myobj'

ただし、関数を次のように定義すると、次のようになります。

MyObj.prototype = {
   a : function(){},
   b : function(){}
}

extend(MyObj);
//->'Object'

後者のメソッドのコンストラクターが、私の関数ではなく JavaScript のネイティブ コード (「オブジェクト」など) の一部である理由を知っている人はいますか?

どんな助けでも大歓迎です!

4

2 に答える 2

2

2 番目のケースでコンストラクター プロパティを追加してみてください。
を上書きしているためprototype、プロパティも上書きしていobj.prototype.constructorます。
したがって、次のように使用します。

MyObj.prototype = {
    constructor : MyObj,
    method1 : ...
}
于 2012-09-06T07:18:24.027 に答える
0

を使用するとき"MyObj.prototype.a"は、ネイティブ プロトタイプを使用し、それに新しい関数を追加しているためです。

しかし、他の方法を使用すると、ネイティブ プロトタイプが新しいオブジェクトに置き換えられます。

于 2012-09-06T07:14:49.460 に答える