5

関数オブジェクトには、名前と呼ばれる非標準のプロパティがあります。誰かがそれを変更する方法を知っていますか? または、匿名関数の名前を変更する他の方法はありますか? JavaScript が動的に名前を付けた変数を作成できればよいのですが、パブリック オブジェクトのプロパティ name しか作成できないようです。
私は何をしようとしていますか?
私はこのような何かを達成しようとしています。

// o - literal object, or json
// c - string
function givemeConstructor(o, c, a}){
    var a = a || 'Object';
    // check other variables
    var cons;

    if(a === 'Object'){
        cons = function(){};
        for(p in o) cons.prototype[p] = o[p];
        cons.name = c;
    }
    else{
        // a way to create a constructor that inherits from a
        // adds object as new prototype
    }

    return cons;            
}

var cons = givemeConstructor({x:1,y:1, toString:function(){return '['+ x + ','+ y+'']'}, 'Point'})


最終的に内省可能なオブジェクトを取得します。

4

1 に答える 1

0

ここで遊んでいるパターンははっきりしていnameませんが、コンストラクター関数にプロパティを追加しても、その名前で参照できないという混乱があるようです。その「名前」は、割り当てた変数です。

これまでに行ったことに基づいて、これはあなたが望むものを与えると思います-

function givemeConstructor ( proto ){
    var tmp = function(){};
    tmp.prototype = proto;
    return tmp;
}

var Point = givemeConstructor( {x:1 ,y:1, toString:function(){return '['+ this.x + ','+ this.y +']' } } );
var p = new Point;

ノート:

  1. 関数は、プロトタイプの変数を使用this.xしてアクセスする必要がありますthis.y
  2. xこれを行うと、コンストラクターはy引数を取ることができません
  3. 検査Point.prototypeまたはインスタンス化して検査できますp
  4. に設定Function.nameするのPointはかなり無意味であり、コンストラクターの参照方法は変更されません。
于 2012-11-28T11:10:29.420 に答える