![](/img/trans.png)
[英]Is new super.constructor a valid expression in JavaScript?
[英]JavaScript super.constructor() throws "must call before accessing this" exception
我正在嘗試在 JavaScript 中派生一個類。 基本上我有一個類Auth
(更像是一個接口)和一個從它擴展的類UserLogin
。 問題是即使我先調用super.constructor()
,我也會收到此異常:
/Users/octav/Documents/work/framework-one/framework/server/src/user_login.js:12
super.constructor(server);
^
ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor
at new UserLogin (/Users/octav/Documents/work/framework-one/framework/server/src/user_login.js:12:3)
at Object.<anonymous> (/Users/octav/Documents/work/framework-one/framework/server/app.js:8:14)
at Module._compile (internal/modules/cjs/loader.js:955:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)
at Module.load (internal/modules/cjs/loader.js:811:32)
at Function.Module._load (internal/modules/cjs/loader.js:723:14)
at Function.Module.runMain (internal/modules/cjs/loader.js:1043:10)
at internal/main/run_main_module.js:17:11
基類:
/*
* Generic authentication class
*/
const ServerError = require("./server_error.js");
class Auth {
constructor(server) {
if (server === undefined || typeof("server") !== "object")
throw new ServerError("Bad type or missing argument 'server'");
this.server = server;
}
...
UserLogin
類 - 如您所見,在調用超級構造函數之前我沒有調用this
。
/*
* User Login class
*/
const Auth = require("./auth.js");
const ServerError = require("./server_error.js");
class UserLogin extends Auth {
constructor(server, config) {
super.constructor(server); // <== This is where the error is triggered
if (config === undefined || typeof(config) !== "object")
throw new ServerError("Missing config or bad type");
if (config.endpoints === undefined || typeof(config.endpoints) !== "object")
throw new ServerError("Missing config.endpoints or bad type");
if (config.endpoints.login === undefined || typeof(config.endpoints.login) !== "object")
throw new ServerError("Missing config.endpoints.login or bad type");
if (config.endpoints.logout === undefined || typeof(config.endpoints.logout) !== "object")
throw new ServerError("Missing config.endpoints.logout or bad type");
this.endpoints = config.endpoints;
}
...
我的啟動腳本:
const Server = require("./src/server.js");
const UserLogin = require("./src/user_login.js");
const config = require("./config.json");
const server = new Server(config);
const auth = new UserLogin(server, config.login); // <== This is where the error is triggered
server.setAuth(auth);
server.start();
我試圖在網上尋找答案,但我能找到的只是關於如何在 JavaScript 中派生類的頁面。
有任何想法嗎?
在UserLogin
類的構造函數中,需要先調用super() :
class UserLogin extends Auth {
constructor(server, config) {
super(); // you're missing this
super.constructor(server);
// ...
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.