es6箭头功能和关键词“this”

时间:2016-10-06 21:39:52

标签: ecmascript-6

const func = (() => {
  
  const init = (data) => {
    organizeData(data);
    return this;
  }
  
  const otherFunc = () => {
    //Do something else
  }

  return {
  init:init,
  otherFunc: otherFunc
  }

})();

func.init(data).otherFunc()

我的init函数中存在“this”的问题。它指的是窗口而不是我的func对象。

它返回func.init(data).otherFunc()不是函数,因为它指向窗口而不是我的函数

提前致谢

1 个答案:

答案 0 :(得分:0)

箭头函数会将this的上下文分配到已定义的相同上下文中,而不是在执行时。

这意味着示例中的第一行将this绑定到全局命名空间,因为它是在全局范围内定义的。

如果您希望在运行时动态绑定某个函数,则必须使用旧的function () {}版本,而不是() => {}

一个好的经验法则是当你在已知的上下文中时才使用箭头函数。