使用 ES6/ES2015 和 webpack,我试图理解关键字 this 这个小怪物。
我有一个包含静态方法change(event)
的类Edit
,在该方法中我试图对该方法本身进行递归调用(取决于给定变量)。
在大多数情况下,我可以只调用 this.change(event)
但这里关键字 this 已经被调用该函数的 jquery 对象占用,而不是包含类。
最简单的解决方案是直接调用 Edit.change(event)
,但必须有一个更简洁的解决方案。到目前为止,我遇到的每种编程语言都对其内置的包含类进行了一些引用。
我保证我已经检查了 stackoverflow 上的文档和其他线程,但我发现似乎没有人能够解决这一特定问题。
// main.js
'use strict';
const $ = require('jquery');
const Edit = require('./Edit');
$(document).ready(() => {
let thingsToAddToData = {
whatToDo: // defined here depending on context
someVariable: //defined here depending on context
};
$('table :input').change(thingsToAddToData, Edit.change);
}
这里定义了 Edit 类
// Edit.js
class Edit {
static change(event) {
if(event.data.whatToDo === 'do_nothing'){
return false;
}
if(event.data.whatToDo === 'do_this_important_thing'){
// here some important stuff is done
return true;
}
if(event.data.someVariable === 'special_case'){
event.data.whatToDo = 'do_this_important_thing'
// THIS IS THE LINE THAT GIVES ME HEADACHES
return this.change(event);
}
// here some default stuff is done
}
}
module.exports = Edit;
最佳答案
The easiest solution would be to just call
Edit.change(event)
instead, but there must be a cleaner solution
不,这确实是您需要用来始终引用 Edit
类的东西。没什么乱七八糟的,就用它吧。
如果您不将该方法用作事件处理程序,也可以使用 this.change(event)
。确保将其作为方法调用:
$('table :input').change(thingsToAddToData, Edit.change.bind(Edit));
// or
$('table :input').change(thingsToAddToData, e => Edit.change(e));
关于javascript - 当调用对象已获取 "this"时,如何从静态方法中引用包含类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54378575/