首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我不能使用在同一对象中创建的方法来修改对象的属性。我正在尝试使用foreach then console.log是未定义的

您遇到的问题可能是由于在JavaScript中,forEach方法的回调函数中的this上下文与外部作用域的this不同导致的。在JavaScript中,函数的this值取决于它是如何被调用的。当您在forEach的回调函数中使用this时,它通常指向的是全局对象(在浏览器中是window),而不是您期望的对象。

为了解决这个问题,您可以采取以下几种方法之一:

方法1:使用箭头函数

箭头函数不会绑定自己的this,它会捕获其所在上下文的this值。这意味着您可以在箭头函数中直接使用外部作用域的this

代码语言:txt
复制
const myObject = {
  property: 'value',
  updateProperty: function(newValue) {
    this.property = newValue;
  },
  logProperties: function() {
    this.property.forEach((item, index) => {
      console.log(item);
      this.updateProperty(`new value at index ${index}`);
    });
  }
};

myObject.logProperties();
console.log(myObject.property); // 输出更新后的属性值

方法2:使用.bind(this)

您可以在forEach的回调函数中使用.bind(this)来显式地将this绑定到外部作用域。

代码语言:txt
复制
const myObject = {
  property: ['value1', 'value2'],
  updateProperty: function(newValue) {
    this.property = newValue;
  },
  logProperties: function() {
    this.property.forEach(function(item, index) {
      console.log(item);
      this.updateProperty(`new value at index ${index}`);
    }, this); // 使用.bind(this)来绑定正确的this
  }
};

myObject.logProperties();
console.log(myObject.property); // 输出更新后的属性值

方法3:保存this引用

在调用forEach之前,将外部作用域的this保存到一个变量中,然后在回调函数中使用这个变量。

代码语言:txt
复制
const myObject = {
  property: ['value1', 'value2'],
  updateProperty: function(newValue) {
    this.property = newValue;
  },
  logProperties: function() {
    const self = this; // 保存this引用
    this.property.forEach(function(item, index) {
      console.log(item);
      self.updateProperty(`new value at index ${index}`); // 使用self代替this
    });
  }
};

myObject.logProperties();
console.log(myObject.property); // 输出更新后的属性值

以上方法可以解决您在使用forEach时遇到的this上下文问题。选择哪种方法取决于您的个人喜好和代码风格。如果您需要更多关于JavaScript this上下文的信息,可以参考MDN Web Docs的相关页面:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this

相关搜索:我需要使用在jar文件中创建的bean,以便在我的主应用程序中使用。我尝试自动连接它,但得到的结果是空对象为什么我不能在React/Redux中索引我的对象?TypeError:无法读取未定义的属性“%1”我正在尝试使用map函数在对象内部打印数组,但我得到:无法读取未定义的属性映射为什么我在函数中创建的对象不能被其他函数修改?(C++)为什么我不能使用在jquery对象中创建的javascript函数,以及如何在jquery中声明自定义函数?为什么我在计算对象中得到的对象属性是未定义的,而不是对象本身?在这种情况下,哪种方法更适合?我正在尝试渲染一行中的对象,但我的一个图像与使用flexDirection:row的其他图像不能很好地配合我正在使用动态表单从表单中检索值,但是当我通过控制台记录从表单中的值创建的对象时,我得到了未定义的值如果我在同一项目中使用我的设备的摄像头,我可以在JS中创建3D对象吗?我正在尝试使用JavaScript将海报URL添加到我的neo4j电影数据库中,但是我总是收到这个未定义的对象错误我正在尝试使用rowEvents来触发react-bootstrap-table-2中的操作,但是onClick中的'this‘是未定义的。有什么想法吗?我正在尝试将地图嵌套到RxJava2中的过滤器中,这样我就可以删除所有没有正确平台的对象。但是不能建造它每当我尝试调用我在另一个react本机应用程序中创建的ReactNativeLibrary时,我都会收到“未定义的不是对象”的消息使用Fluent验证,我如何检查一个对象中的两个属性都不能有值?为什么我不能使用计算结果为同一字符串的不同类型访问对象属性?我正在尝试使用处理中的旋转和投影矩阵在2D中呈现3D对象(立方体) (Java)如果我不能创建一个在模型中禁止过去日期的对象,如何使用RSpec on Rails测试过去的日期?我正在尝试使用Java上的gson将大量自定义对象写入到json文件中,但在文件完成之前就中断了?我正在尝试使用在pubspec.yaml中检测到的goolge地图创建应用程序:第30行,第3列的错误:解析块映射时需要一个键
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的合辑

领券