У меня есть этот код:
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
}
}