Javascript 带有ECMAScript 6的JSHint:未定义方法

Javascript 带有ECMAScript 6的JSHint:未定义方法,javascript,ecmascript-6,jshint,Javascript,Ecmascript 6,Jshint,我正在使用ECMAScript 6实现一个客户端应用程序,并用于静态代码分析。我经常在代码中使用以下模式: class MyClass { constructor() { //This is how I would like to call myMethod myMethod(); //This is how I should call myMethod to make JSHint analysis pass this

我正在使用ECMAScript 6实现一个客户端应用程序,并用于静态代码分析。我经常在代码中使用以下模式:

class MyClass {

    constructor() {
        //This is how I would like to call myMethod
        myMethod();

        //This is how I should call myMethod to make JSHint analysis pass
        this.myMethod();
    }

    myMethod(){
        //Implementation
    }
}
我的主要语言是Java,因此我希望只需调用myMethod()就可以了。然而,如果不向方法调用添加这个,我将从JSHint得到“myMethod”未定义的警告。我的问题是:

  • 在这种情况下,不使用此打电话是否正确?(例如,在PHP中,您始终需要将$this->添加到非静态方法调用中)
  • 如果在没有此的情况下调用是正确的,是否有任何方法(any.jshintrc标志)在JSHint中关闭此警告

  • 不,这在JavaScript中是正确的,而且从来都不正确。方法总是需要在接收方上显式地调用,并且需要使用属性访问表示法来引用它们,因为方法只是javascript中属性上的函数。它们在其他方法的作用域中不可用,顺便说一句


    JsHint就在这里,没有理由关闭该警告。即使这是可能的,尽管这样执行程序也会使其无法工作。

    在您提供的代码中,没有定义标识符
    myMethod
    ,但定义了
    MyClass
    实例的继承属性myMethod

    如果您将
    myMethod
    定义为闭包下的函数,而闭包在其他地方不可用,那么您可以按照您所需的形式访问它

    var MyClass = (function () {
        function myMethod() {
            //Implementation
        }
    
        class MyClass {
            constructor() {
                myMethod();
            }
        }
        return MyClass;
    }());
    
    我没有编写太多ES6,因此我不确定将
    函数myMethod
    放在
    MyClass
    的定义中是否是语法错误

    但是,请注意,
    是引用您的
    MyClass
    的特定实例所必需的,因此如果您希望
    MyMethod
    对该实例执行操作,您可能需要在某个地方使用它

    function myMethod(obj) {...}
    // ...
            myMethod(this);
    

    如果你读了

    JavaScript类是在ECMAScript 6中引入的,并且是语法上的糖,而不是JavaScript现有的基于原型的继承。类语法是而不是,它向JavaScript引入了一个新的面向对象继承模型。JS类提供了一种更简单、更清晰的语法来创建对象和处理继承

    这意味着使用
    class
    只是旧方法的简写,而不是新模型,因此,如果使用ES5编写当前代码,您可能会更容易想到它是什么样子

    在这种情况下不打这个电话对吗?(例如在 PHP您始终需要将$this->添加到非静态方法调用中)

    不,不是。您必须始终指定方法的接收者

    如果这是正确的打电话没有这是有任何方法(任何 .jshintrc标志)关闭JSHint中的此警告

    JSHint正确返回“myMethod”警告,因为构造函数的作用域中没有调用函数
    myMethod

    var MyClass = (function () {
        function MyClass() {
            this.constructor.apply(this, arguments);
        }
        MyClass.prototype = Object.create(null);
        MyClass.prototype.constructor = function () {
            myMethod(); // referenceError
            this.myMethod(); // works
        };
        MyClass.prototype.myMethod = function () {
            //Implementation
        };
        return MyClass;
    }());