我有此代码:
function Selector(){
this.name = 'Selector';
this.select = function(fName){
return this[fName]
}
this.funcOne = function(arg){
console.log(arg + this.name)
}
}
var mySelector = new Selector();
mySelector.select('funcOne')('Hello');
当我使用此实现调用funcOne
时,funcOne
中的上下文是函数本身,而不是Selector
实例。如何通过以这种方式调用funcOne来维护实例的上下文?
编辑:我正在使用Extendscript,因为它是ES3环境,所以不能使用bind()或箭头函数。我真正需要的是能够分别传递所选函数的参数,因为这一思想一方面是能够选择带有多个不同参数的不同函数,另一方面是能够使用括号语法进行链调用:
function Selector(){
this.name = 'Selector';
this.select = function(fName){
return this[fName]
}
this.funcOne = function(arg){
console.log(arg + this.name)
return this.select
}
this.funcTwo = function(arg1, arg2)
{
console.log(arg1 + arg2 + this.name)
return this.select
}
}
var mySelector = new Selector();
mySelector.select('funcOne')('Hello');
mySelector.select('funcTwo')('Hello ', 'my ')('funcOne')('Hello again ');
因此,使用指向实例的指针也无济于事,因为上下文仍然存在问题:
function Selector(){
var self = this
this.name = 'Selector';
this.select = function(fName){
return this[fName]
}
this.funcOne = function(arg){
var s = self; // undefined
}
}