从构造函数中获取对象的所有javascript函数,但不是那些使用“this”分配的函数?

时间:2013-02-18 21:39:53

标签: javascript underscore.js

我需要在构造函数中获取所有函数名称,排除那些使用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() {}

2 个答案:

答案 0 :(得分:2)

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

_.functions(MyObject.prototype);

答案 1 :(得分:1)

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

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

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

var funcs = _functions(this.__proto__);