javascript - 在 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
}
}
解决方案
推荐阅读
- log4j - log4j2如何选择会话而不是日期
- java - 在 Java Servlet 中集成 Google Sheets API
- android - 运行 Gradle 任务 'assembleDebug'... 参数格式不正确 -
- reactjs - 自定义 Adobe 的 React Spectrum 主题
- firebase - 构建以连接到 Firebase 时,任务“:app:processDebugResources”的 Flutter Build 失败
- python - 使用 pyinstaller 导出 tkinter python 应用程序时出错?
- javascript - 是的,有条件地使用带有无线电输入的 `when`
- sql - 如何确定它在Oracle中的索引名称索引的列/列名称
- php - Woocommerce 产品标题显示 HTML?
- regex - 使用正则表达式获取价值