You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript类创建与导入导出报错:实例未定义求助

解决JavaScript模块中类实例未定义的问题

我正在学习JavaScript的对象与类创建内容,在person.js里定义了Person类,通过export default导出,然后在script.js里用import导入并创建实例,但控制台提示实例未定义。

原HTML代码

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Classes</title>
    <script type="module" src="person.js"></script>
    <script type="module" src="script.js"></script>
  </head>
  <body></body>
</html>

原person.js代码

class Person {
  constructor(
    firstName,
    lastName,
    dateOfbirth,
    Age, 
    Nationality, 
  )
  {
    this.firstName = firstName;
    this.lastName = lastName;
    this.dateOfbirth = dateOfbirth;
    this.Age = Age;
    this.Nationality = Nationality
  
  }
  
}

export default Person

原script.js代码

import Person from "./person.js";

const Shek = new Person (
  John,
  Doe, 
  10111990,
  27,
  'American'
)

问题分析与解决方案

  • 核心问题1:字符串参数未加引号
    实例化Person时,John和Doe是字符串类型的名字,但没有用引号包裹,JavaScript会将其视为未定义的变量,直接导致实例创建失败,后续访问实例时就会提示“未定义”。

  • 核心问题2:缺少控制台输出语句
    你没有编写console.log(Shek)来打印实例,就算实例创建成功也无法看到结果;而前面的参数错误已经导致实例根本无法生成,所以控制台必然报错。

  • 额外优化:参数名符合JS命名规范
    JavaScript中变量、参数通常采用小驼峰命名(首字母小写,后续单词首字母大写),比如将Age改为age、Nationality改为nationality,保持代码风格一致性。


修正后的script.js

import Person from "./person.js";

// 为字符串参数添加引号,同时修正实例名的命名规范(可选但推荐)
const shek = new Person (
  'John',
  'Doe', 
  10111990,
  27,
  'American'
);

// 添加控制台输出语句
console.log(shek);

优化后的person.js(可选)

class Person {
  constructor(
    firstName,
    lastName,
    dateOfBirth, // 修正为小驼峰命名
    age, 
    nationality, 
  ) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.dateOfBirth = dateOfBirth;
    this.age = age;
    this.nationality = nationality;
  }
}

export default Person

内容的提问来源于stack exchange,提问作者BlackmonDon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 10:29:54