0

私はこのようなことをしたい:

var f = function(){
    var args = arguments;
    args.push(this._caller);
    this._base(args);
};

f._caller = someObject;
f._base = function(x,y,z){ alert(x+':'+y+':'+z);};

f(y,z);

基本的に-関数にいくつかの内部パラメーターを与えたいのですが、それでも関数はそのパラメーターで呼び出される必要があり、ユーザーはこの関数を呼び出すときにこのパラメーターについて知る必要はありません。

問題は、関数本体で「this」が「ウィンドウ」を意味し、必要な関数ではないことです。

では、どうすればこれを行うことができますか?そして、私はこれを行うことができますか?

4

1 に答える 1

2
  1. thisそれ自体ではなくfunction、関数が呼び出されたコンテキストです。名前を付けると、 のプロパティにアクセスできますfunction(var fは を設定しませんname)。

    var f = function fn() {
        var _caller = fn._caller;
        var _base = fn._base;
        // ...
    };
    
  2. メソッドは実際にはarguments.push()存在しないため、存在しません。ただし、次のようにして作成できます。argumentsArrayArray.slice()

    var args = Array.prototype.slice.call(argument, 0);
    args.push(_caller);
    
  3. コンテキスト ( ) を設定し、引数のthisを渡すには、 を使用します。ArrayFunction#apply

    return _base.apply(this, args);
    
于 2013-07-28T10:59:50.753 に答える