我们说我有一个对象:
obj = {func1: function(){return $(h1)};} // notice, there is no $ defined anywhere...
在其他地方我有一条线
jq = require('jQuery');
现在想编写一个函数或者其他东西,它将对象和jQuery作为参数绑定并绑定它以便我可以这样做:
obj2 = myBind(obj, jq);
obj2.func1(); // works
答案 0 :(得分:0)
obj = {func1: function(){return $(h1)};}
注意,在任何地方都没有定义$ ...
然后它将保持未定义,除非您在任何父范围(如全局范围)中创建这样的变量。
但是,您无法将变量注入到您没有“拥有”的范围中,您无法从函数引用中访问obj.func1
闭包的范围 - 您需要事先将代码放在该范围内。
但是,您可以使用属性而不是变量,例如
var obj = {
func1: function() {
return this.$("h1");
}
};
// later:
obj.$ = require("jQuery");
obj.func1();
答案 1 :(得分:0)
@bergi说的是对的。另一种解决方案也可能是以某种方式使用Function.bind:
var obj = {
func1: function() {
return this("h1");
}
};
obj.func1 = obj.func1.bind(require('jQuery'));
// later:
obj.func1();