Вернуть метод объекта с контекстом объекта в JS (ES3) - PullRequest
2 голосов
/ 21 мая 2019

У меня есть этот код:

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
    }
}
...