我有这个代码:
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
}
}