这段js的this指向问题?

[
  'push',
  'pop',
  'shift',
  'unshift',
  'splice',
  'sort',
  'reverse'
].forEach(method => {
  const original = ArrayProto[method];
  Object.defineProperty(arrayMethods, method, {
    value: function mutator(...args) {
      console.log('mutator:', this, args);
      return original.apply(this, args); //这里的this指向的是调用push的那个元素 为什么?
    },
    enumerable: false,
    writable: true,
    configurable: true
  })
})

注释中的this指向了调用push的那个元素 为什么?

阅读 1.4k
1 个回答

虽然MDN里的详细指南没有Object.defineProperty的value说明
但是这里有getter 与 setter 中的 this的指南
明确写到:

用作 getter 或 setter 的函数都会把 this 绑定到设置或获取属性的对象。

应该也是从了这条吧,所以指向的是调用的那个object

参考:MDN

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题