码迷,mamicode.com
首页 > 移动开发 > 详细

ECMAScript6的lambda(arrow function)的this绑定导致call/apply失效

时间:2015-11-28 12:03:59      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:

错误场景:

App = React.createClass({
    render: () => {
    return (
      <div></div>
    );
  }
});

按照上述写法,在用到App的地方会出现undefined的问题。

而下面这种写法则没有问题:

App = React.createClass({
  render: function () {
    return (
      <div></div>
    );
  }
});

另外也可以使用es6的简化的方法定义写法:

App = React.createClass({
  render () {
    return (
      <div></div>
    );
  }
});

一般说来,能用lambda的地方肯定尽量用,简洁美观,但是上面第一种写法导致了错误,我猜测是this的问题,查阅发现lambda和call/apply有一点冲突,lambda因为自动绑定this,会导致call/apply绑定this的企图失败:Arrow functions - JavaScript | MDN 。这样写的话lambda的this绑定到了global object上:stackoverflow的一个答案

本人水平所限,没有去阅读react的源码证实render是绑定this使用的,但上述错误的原因也只有这个可能了 :)

ECMAScript6的lambda(arrow function)的this绑定导致call/apply失效

标签:

原文地址:http://www.cnblogs.com/pandari/p/5001261.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!