[英]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.