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 に答える