5

函数对象有一个名为 name 的非标准属性。有谁知道改变它的方法吗?或任何其他方式来更改匿名函数的名称?如果 JavaScript 可以创建动态命名的变量会很好,但它似乎只能创建公共对象属性名称。
我想做什么?
我正在努力实现这样的目标。

// 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.xthis.y访问原型中的变量
  2. 如果你这样做,你的构造函数不能接受x和参数y
  3. 您可以检查Point.prototype或实例化和检查p
  4. 设置Function.namePoint非常没有意义,并且不会改变构造函数的引用方式。
于 2012-11-28T11:10:29.420 回答