gpt4 book ai didi

javascript - 在扩展类中运行构造函数

转载 作者:搜寻专家 更新时间:2023-11-01 00:41:13 24 4
gpt4 key购买 nike

我正在 Node.js 中使用 extends。我创建了一个名为 Person 的类和另一个扩展 Person 的类,名为 WorkerWorker 类有一个完美运行的work 函数(它显示了 getName() 结果,在 Person 中定义).我想为 Worker 构造函数添加另一个参数。

我尝试在 Worker 中添加 constructor 函数,如下所示:

"use strict";

class Person {
constructor (name) {
this.name = name;
}
getName () {
return this.name;
}
}

class Worker extends Person {
// Without this constructor, everything works correctly
// But I want to add the type field
constructor (name, type) {
console.log(1);
// this.type = type;
}
work () {
console.log(this.getName() + " is working.");
}
}

var w = new Worker("Johnny", "builder");
w.work();

运行时出现以下错误:

path/to/my/index.js:14
console.log(1);
^

ReferenceError: this is not defined
at Worker (/path/to/my/index.js:14:17)
at Object.<anonymous> (/path/to/my/index.js:22:9)
at Module._compile (module.js:434:26)
at Object.Module._extensions..js (module.js:452:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:475:10)
at startup (node.js:117:18)
at node.js:951:3

为什么会出现这个?另外,我怎样才能正确地做到这一点?

我想在 w 实例中访问 type 字段:

console.log(w.type);

最佳答案

您需要在扩展构造函数中调用 super()。否则,它不会调用 Person 类中的构造函数。

class Person {
constructor (name) {
this.name = name;
}
getName () {
return this.name;
}
}

class Worker extends Person {
constructor (name, type) {
super(name);
this.type = type;
}
work () {
console.log(this.getName() + " is working.");
}
}

现在应该可以工作了:

var w = new Worker("Johnny", "builder");
w.work();
console.log(w.type); //builder

关于javascript - 在扩展类中运行构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33954107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com