在JS(ES3)上返回具有对象上下文的对象方法

时间:2019-05-20 21:12:35

标签: javascript function object ecmascript-3

我有此代码:

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

0 个答案:

没有答案