[英]JSHint with ECMAScript6: method is not defined
我正在使用ECMAScript6实现客户端应用程序,并使用JSHint进行静态代码分析。 我经常在代码中使用以下模式:
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'的警告”。 我的问题是:
在您提供的代码中,未定义标识符myMethod
,但定义了MyClass
实例的继承属性myMethod 。
如果您将myMethod
定义为在其他地方无法使用的闭包下的函数 ,则可以按所需的形式对其进行访问
var MyClass = (function () {
function myMethod() {
//Implementation
}
class MyClass {
constructor() {
myMethod();
}
}
return MyClass;
}());
我没写太多ES6,所以我不确定将function myMethod
放入MyClass
的定义中是否是SyntaxError
但是请注意, this
是引用您的MyClass
特定实例所必需的,因此,如果您希望MyMethod
对该实例执行操作,则可能需要在某个地方使用它。
function myMethod(obj) {...}
// ...
myMethod(this);
如果您阅读了MDN的class
说明
JavaScript类在ECMAScript 6中引入,是JavaScript现有的基于原型的继承的 语法糖 。 类语法没有向JavaScript引入新的面向对象的继承模型。 JS类提供了一种更简单明了的语法来创建对象和处理继承。
这就是说使用class
只是实现旧方法的简写,而不是新模型,因此考虑使用ES5编写当前代码看起来会更容易,
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;
}());
在这种情况下拨打电话不带电话是否正确? (例如,在PHP中,您始终需要将$ this->添加到非静态方法调用中)
不它不是。 您始终必须指定方法的接收者。
如果在没有此方法的情况下进行呼叫是否正确,是否有任何方法(任何.jshintrc标志)可以在JSHint中关闭此警告?
JSHint返回正确的“'myMethod'未定义”警告,因为在构造函数的范围内没有名为myMethod
的函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.