0

我需要在构造函数中获取所有函数名称,不包括那些分配this有的函数:

var MyObject = function (arg1, arg2) {
    this.arg1 = arg1;
    this.arg2 = arg2;

    // Get all functions, i.e. 'foo', excluding 'arg1' and 'arg2'
};

MyObject.prototype.foo = function() {}

我用过 Underscore.js,但没有运气。假设实际参数都是函数:

var MyObject = function (arg1, arg2) {
    this.arg1 = arg1;
    this.arg2 = arg2;

    // Array of object function names, that is 'foo', 'arg1' and 'arg2'
    var functions = _.functions(this);

     // Loop over function names
    _.each(functions, function (name) {}, this) {
        // Function arguments contain this.name? Strict check ===
        if(_.contains(arguments, this.name) {
            functions = _.without(functions, name); // Remove this function
        }
    }
};

MyObject.prototype.foo = function() {}
4

2 回答 2

2

您要求原型定义的所有功能:

_.functions(MyObject.prototype);
于 2013-02-18T21:42:17.703 回答
1

上的函数this是您在构造函数中分配的函数以及从原型继承的函数。所以你需要做的是查询原型的功能:

var funcs = _functions(Object.getPrototypeOf(this));

以上适用于所有相当现代的浏览器。对于早期的 IE,你可以回退到非标准

var funcs = _functions(this.__proto__);
于 2013-02-18T21:45:42.540 回答