admin管理员组

文章数量:1026125

Is this possible to add variable to callback scope? What I want to achieve is:

...
Foo.prototype.bar = function(fn) {
    var baz = "baz!";
    fn.call(this);
}
...
Foo.bar(function() {
    console.log(baz) // gives "baz!"
});

I know I can pass baz variable as an argument or this but I'm interested in something like above.

Is this possible to add variable to callback scope? What I want to achieve is:

...
Foo.prototype.bar = function(fn) {
    var baz = "baz!";
    fn.call(this);
}
...
Foo.bar(function() {
    console.log(baz) // gives "baz!"
});

I know I can pass baz variable as an argument or this but I'm interested in something like above.

Share Improve this question asked Dec 24, 2011 at 21:24 jesperjesper 8898 silver badges21 bronze badges 1
  • You probably mean (new Foo).bar, since it's a property of instances, not of the constructor. – pimvdb Commented Dec 24, 2011 at 22:50
Add a ment  | 

2 Answers 2

Reset to default 4

No, it's not possible. The only ways are the ones you pointed out: as an argument or in this.

What about doing it this way:

var Foo = function(){}
Foo.prototype.handle = function(fn) {
    var baz = "baz !";
    eval('(' + fn.toString() + ')();');
}

var foo = new Foo;
foo.handle(function (){
    console.log(baz);
});

Is this possible to add variable to callback scope? What I want to achieve is:

...
Foo.prototype.bar = function(fn) {
    var baz = "baz!";
    fn.call(this);
}
...
Foo.bar(function() {
    console.log(baz) // gives "baz!"
});

I know I can pass baz variable as an argument or this but I'm interested in something like above.

Is this possible to add variable to callback scope? What I want to achieve is:

...
Foo.prototype.bar = function(fn) {
    var baz = "baz!";
    fn.call(this);
}
...
Foo.bar(function() {
    console.log(baz) // gives "baz!"
});

I know I can pass baz variable as an argument or this but I'm interested in something like above.

Share Improve this question asked Dec 24, 2011 at 21:24 jesperjesper 8898 silver badges21 bronze badges 1
  • You probably mean (new Foo).bar, since it's a property of instances, not of the constructor. – pimvdb Commented Dec 24, 2011 at 22:50
Add a ment  | 

2 Answers 2

Reset to default 4

No, it's not possible. The only ways are the ones you pointed out: as an argument or in this.

What about doing it this way:

var Foo = function(){}
Foo.prototype.handle = function(fn) {
    var baz = "baz !";
    eval('(' + fn.toString() + ')();');
}

var foo = new Foo;
foo.handle(function (){
    console.log(baz);
});

本文标签: javascriptInject variable into callback function scopeStack Overflow