如何将当前作用域变量和函数传递给普通Javascript或jQuery中的匿名函数(如果它特定于框架)。
例如:
jQuery.extend({
someFunction: function(onSomeEvent) {
var variable = 'some text'
onSomeEvent.apply(this); // how to pass current scope variables/functions to this function?
return null;
_someMethod(arg) {
console.log(arg);
}
}
});
应该从上面的函数登录firebug:
jQuery.someFunction(function(){
console.log(this.variable); // or console.log(variable);
console.log(this._someMethod(1); // or jQuery.someFunction._someMethod(2);
});
谢谢!
答案 0 :(得分:3)
阅读JavaScript中的范围,例如“Java Script:The good parts”。
在Java Script中,函数内只有范围。 如果使用 var 在函数内指定变量,则无法从此函数外部访问它们。这是在JavaScript中创建私有变量的方法。
您可以使用此变量,指向您所在的当前对象(这不是作用域本身)。但!如果您在没有新命令的情况下启动功能,则此将指向外部范围(在大多数情况下,它是窗口对象=全局范围)。
示例:
function foo(){
var a = 10;
}
var f = foo(); //there is nothing in f
var f = new foo(); //there is nothing in f
function bar(){
this.a = 10;
}
var b = new bar(); //b.a == 10
var b = bar(); //b.a == undefined, but a in global scope
顺便说一下,查看apply方法Mozilla docs/apply的语法 所以你可以看到,拳头参数是对象,当你的方法被调用时,这个。
所以请考虑这个例子:
function bar(){
console.log(this.a);
console.log(this.innerMethod(10));
}
function foo(){
this.a = 10;
this.innerMethod = function(a){
return a+10;
}
bar.apply(this);
}
var f = new foo(); // => you will get 10 and 20 in the console.
var f = foo(); // => you will still get 10 and 20 in the console. But in this case, your "this" variable //will be just a global object (window)
也许最好制作
var that = this;
在调用apply方法之前,但也许不需要它。不确定
所以,这肯定会奏效:
function foo(){
console.log(this.a);
}
jQuery.extend({
somefunc: function(func){
this.a = 10;
func.apply(this);
}
});
$.somefunc(foo); //will print 10.
答案 1 :(得分:0)
在第1行之前:
var that = this;
然后改变第4行:
onSomeEvent.apply(that);