-1

親関数のスコープ内で関数を定義し、親関数を介して渡された引数を返す前にそのスコープとしてバインドすることは可能ですか?

次に例を示します。

var myObject = {
    foo: "bar"
};

var myFunction = (function() {
    return function() {
        return this.foo;
    };
}).call(myObject);

myFunction.call(myObject); // I'd like to bind myObject as this does ...

myFunction(); // ... but I'd like to do it before invoking it, without .call() or .apply()

または、私がやろうとしていることを説明する別の複雑な例:

var createMyCopy = function(original, self) {
    var copy;

    eval("copy=" + original.toString());

    console.log(copy()); // returns undefined
};

(function() {
    var self = "Hello world",
        myFunction = function() {
            return self;
        };

    console.log(myFunction()); // returns "Hello world"

    createMyCopy(myFunction);
})();

元の関数を変更せずに関数を変更できるように、関数のコピーを作成しようとしていますが、元の関数で定義されている変数もコピーに含めたいです...

4

3 に答える 3

1

こういう意味ですか?

var myObject = {
    foo: "bar"
};

var myFunction = (function() {
    var self = this;
    return function() {
        return self.foo;
    };
}).call(myObject);

質問の範囲とコンテキストが混同されていると思います。

于 2012-04-27T20:26:36.553 に答える
1

私はあなたがこれを意味すると思います:

var myFunction = (function(obj) {
    return function() {
        return obj.foo;
    };
})(myObject);

すぐに呼び出された関数式が渡さmyObjectれ、そのパラメーターが変数としてバインドされている新しい関数が返されますobj

于 2012-04-27T20:27:58.900 に答える
0

私はあなたが何を意味するのか分かりませんが、これを行うことができます:

var myObject = {
    foo: "bar"
};
function myFunction() {
    return this.foo;
}
console.log(myFunction.apply(myObject)); // bar

の最初の引数applyは the context(つまり、this参照するもの) です。の 2 番目の引数applyは、引数の配列です (ただし、引数がないため、ここでは省略しました)。

于 2012-04-27T20:22:54.020 に答える