javascript - 当调用对象已获取 "this"时,如何从静态方法中引用包含类?

标签 javascript ecmascript-6

使用 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/

相关文章:

javascript - 带有三元运算符的 ES6 .some() 表现不同

javascript - Python Mechanize - 选择一个值并提交不起作用

php - MySQL树结构的实现

javascript - 整个 html 文档的 Backbone js View

javascript - 当 WeakMap 本身在 v8 中被 GC-ed 时值会发生什么

node.js - 编译具有所有功能的 Node.js TypeScript

javascript - 对象属性的有效setState?

javascript - C# 中的 array.map() 示例?

javascript - JavaScript 中嵌套命名空间的继承

javascript - 如何使用 react 测试库测试 react 组件上的条件渲染?