是否可以在父函数范围内定义一个函数,并在返回之前将通过父函数传递的参数绑定为其作用域?
以下是一个例子:
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);
})();
我正在尝试创建一个函数的副本,以便我可以在不更改原始函数的情况下对其进行更改,但我希望在副本中也包含原始函数中定义的变量。 ...
答案 0 :(得分:1)
你的意思是这样吗?
var myObject = {
foo: "bar"
};
var myFunction = (function() {
var self = this;
return function() {
return self.foo;
};
}).call(myObject);
我认为你的问题会使范围和背景混乱。
答案 1 :(得分:1)
我认为你的意思是:
var myFunction = (function(obj) {
return function() {
return obj.foo;
};
})(myObject);
立即调用函数表达式传递myObject
并返回一个新函数,其中该参数被绑定为变量obj
。
答案 2 :(得分:0)
我不确定你的意思,但你可以这样做:
var myObject = {
foo: "bar"
};
function myFunction() {
return this.foo;
}
console.log(myFunction.apply(myObject)); // bar
apply
的第一个参数是context
(即this
指的是什么)。 apply
的第二个参数是一个参数数组(但我在这里省略了,因为没有参数)。