JavaScript类:构造函数定义的变量无法在类方法中访问
问题分析与解决办法
嘿,这问题我熟!你之所以拿到undefined,核心原因是构造函数里用let定义的name只是个局部变量——它只存在于构造函数的函数作用域里,和类的实例对象(也就是this)完全不沾边。所以当你在logName里访问this.name时,自然找不到这个变量,只能返回undefined啦。
解决方案1:把变量挂载到实例上(最常用)
如果这个name是属于每个实例的属性,那你应该把它赋值给this,这样类里的方法就能通过this访问到:
class Person { constructor(){ this.name = 'Tom'; // 把name挂载到实例对象上 } logName(){ console.log(this.name); // 现在能拿到Tom啦 } } let x = new Person(); x.logName(); // 输出:Tom
解决方案2:使用ES私有字段(更安全的私有属性)
如果你想让name成为类的私有属性(只能在类内部访问,外部拿不到),可以用ES6+的私有字段语法(前缀加#):
class Person { #name; // 先声明私有字段 constructor(){ this.#name = 'Tom'; // 给私有字段赋值 } logName(){ console.log(this.#name); // 类内部方法可以访问 } } let x = new Person(); x.logName(); // 输出:Tom // x.#name; // 外部访问会报错,保证了私有性
这样两种写法都能解决你遇到的undefined问题,看你需求选就行~
内容的提问来源于stack exchange,提问作者Elon Musk
相关产品推荐
相关产品推荐

