zoukankan      html  css  js  c++  java
  • ECMAScript6的lambda(arrow function)的this绑定导致call/apply失效

    错误场景:

    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使用的,但上述错误的原因也只有这个可能了 :)

  • 相关阅读:
    用户登录
    open >>>文件操作
    随机数
    内置函数
    函数练习
    函数的动态参数
    函数的指定参数
    函数的普通参数
    函数的初步认识
    copy
  • 原文地址:https://www.cnblogs.com/pandari/p/5001261.html
Copyright © 2011-2022 走看看