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

关于JavaScript中this关键字的理解疑问及代码问题咨询

关于JavaScript中this关键字的问题解析

嘿,我来帮你搞清楚这段代码的问题所在~

首先看你写的代码:

let myObject = {
  objectFunc: function() {
    this.thing = 10;
  },
  addFunc: function(x) {
    let result = this.thing + x;
    return result;
  }
}
console.log(myObject.addFunc(20));

你执行这段代码后应该得到的是NaN,对吧?这是因为你虽然定义了objectFunc用来给this.thing赋值,但从来没有调用过这个方法,所以myObject上根本不存在thing属性,this.thing的值是undefined,和数字20相加自然就得到非数字(NaN)了。

这里的this指向是什么?

在对象的方法里,this指向的是调用该方法的对象本身。比如你调用myObject.objectFunc()时,this就指向myObject,执行this.thing = 10就会给myObject添加一个名为thing的属性,值为10。

修正后的代码

你只需要先调用objectFunc初始化thing属性,再调用addFunc就能得到正确结果:

let myObject = {
  objectFunc: function() {
    this.thing = 10;
  },
  addFunc: function(x) {
    let result = this.thing + x;
    return result;
  }
}

// 先初始化thing属性
myObject.objectFunc();
console.log(myObject.addFunc(20)); // 输出 30

更简洁的写法

如果你不需要动态初始化thing,也可以直接在对象定义时就赋值:

let myObject = {
  thing: 10, // 直接初始化属性
  addFunc: function(x) {
    let result = this.thing + x;
    return result;
  }
}

console.log(myObject.addFunc(20)); // 直接输出 30

这样是不是就清楚多啦?核心就是要确保this.thing有有效值的时候再去使用它,而this在这里始终指向myObject这个对象本身。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:49:53