首页 > 解决方案 > 在 JS (ES3) 上返回带有对象上下文的对象方法

问题描述

我有这个代码:

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

标签: javascriptfunctionobjectecmascript-3

解决方案


推荐阅读