JS:将作用域作为参数传递,将其绑定到将返回的函数
JS: Passing a scope as argument, binding it to a function that will be returned
是否可以在父函数的作用域中定义一个函数,并在返回之前将通过父函数传递的参数绑定为其作用域?
下面是一个示例:
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);
})();
我正在尝试创建一个函数的副本,以便我可以在不更改原始函数的情况下对其进行更改,但我希望在副本中也包含原始函数中定义的变量......
你的意思是这样吗?
var myObject = {
foo: "bar"
};
var myFunction = (function() {
var self = this;
return function() {
return self.foo;
};
}).call(myObject);
我认为你的问题混淆了范围和上下文。
我想你的意思是:
var myFunction = (function(obj) {
return function() {
return obj.foo;
};
})(myObject);
立即调用的函数表达式myObject
传递并返回一个新函数,其中该参数绑定为变量 obj
。
我不确定你的意思,但你可以这样做:
var myObject = {
foo: "bar"
};
function myFunction() {
return this.foo;
}
console.log(myFunction.apply(myObject)); // bar
apply
的第一个参数是context
(即this
所指的)。apply
的第二个参数是参数数组(但我在这里省略了它,因为没有参数)。
相关文章:
- Aurelia绑定-点击按钮返回查看模型
- 敲除:可观察数组没有被正确绑定——只有1个结果显示,而api返回6
- 绑定返回的结果和使用function()的结果之间有什么区别
- 如何将返回函数绑定到标记角度
- 挖空 JS html 绑定返回奇怪的代码而不是 html 字符串
- 将返回值从 JavaScript 函数绑定到 ng-model
- 绑定函数的返回语句中参数的推理是什么
- JS:将作用域作为参数传递,将其绑定到将返回的函数
- 如何在角度中将返回值绑定到模型
- 绑定事件在Chrome上失败,但在浏览器返回时在Firefox中正常
- Angularjs:$filter在控制器中返回的数据仍然绑定到原始对象
- 如何将返回的Firebase元素数组绑定到AngularJS视图(通过控制器)
- 我无法在jQuery绑定的回调函数中返回任何内容
- 为什么同一函数的两个绑定返回不同的值
- Node.js解决方案用于XMPP BOSH预绑定以返回SID和RID
- Knockout.js动态HTML绑定返回[object object]
- Knockout:选择绑定返回值数组
- Knockout JS模板attr href绑定返回函数而不是值
- AngularJS双向绑定.返回用户插入的输入
- Angular和Tel绑定返回错误的数据