有了基础的webpack基础,我们要对react的基本语法进行学习。

我这个教程全部用es6 实现。可能会忽略一些最基本的语法讲解,这些你在官网上或者其他别的地方都比我讲的全。

今天我要讲一下react用的较多的bind函数。

源码分析一波:

 Function.prototype.bind = function() {
var __method = this;
var args = Array.prototype.slice.call(arguments);
var object=args.shift();
return function() {
return __method.apply(object,
args.concat(Array.prototype.slice.call(arguments)));
}
}

当我们在react里经常看到类似这样的代码:

this.fn = this.fn.bind(this);

根据上面的语法,其实就是将当前上下文环境绑定到fn中。

为所有function对象增加一个新的prototype(原型)方法bind:

1.将调用bind方法的对象保存到__method(方法)变量里面。 
2.将调用bind方法时传递的参数转换成为数组保存到变量args。 
3.将args数组的第一位[0]元素提取出来保存到变量object。 
4.返回一个函数。 
这个被返回的函数在再次被调用的时候执行如下操作:

1.使用apply方法将调用bind方法的函数里面的this指针替换为object。 
2.将传递到这个匿名函数里面的参数转换为数组,与args数组组合形成一个新的数组,传递给__method方法。 
var args = Array.prototype.slice.call(arguments)将这条代码简写来看可以成为这样[].slice.call(arguments);但是这样会给内存里增加一个空的数组对象,为了容易阅读点在简化可以把它假看成为这样的形式slice.call(arguments),去掉call可以假看成为这样的形式function slice(arguments){….},其实在slice就是一个为所有数组定义好的prototype方法而已它与我们自定义的原型方法不同的是,它是javascript为开发者预先定义好的内置方法,他只能被数组调用。在编辑器里面alert(Array.prototype.slice)之后得到的就是funciton slice(){…}。

既然slice也只是一个普通函数方法,slice.call(object)这样让slice里面的this临时的被替换一下也是可以的。就如[].slice(){..}里面的this指针会指向调用slice方法的数组对象一样。使用call方法或apply方法可以将调用此方法的对象内的this指针临时性的改变为传递参数中的第一个参数,这一切都是临时性的,它会在函数执行完毕内存释放后重置。 
var object=args.shift()将数组中的[0]位置的对象保存到object变量,这个object就是要被替换的指针。

默认你已经知道es6箭头函数的自动绑定context功能,我们接下来学习react的状态函数还有refs.

上图粗粗一看,React组件在它的lifecycle下,有3个总状态:mountingmounted, 和unmounting.

他们有相应的方法:

最新文章

  1. Centos普通用户提权至ROOT
  2. autopep8
  3. ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习
  4. postgresql 配置文件优化
  5. 网站性能Web压力测试工具webbench
  6. Android中解析JSON形式的数据
  7. ContentProvider与ContentResolver使用
  8. JavaWeb核心编程之(三.5)HTTP请求和接受表单数据
  9. Ubuntu下屏幕录像、后期处理不完全攻略
  10. mybaties-plus入门
  11. Spring学习笔记(1)
  12. day07 Class_field_method_反射
  13. Shell执行*.sql
  14. Typescript骚操作,在TS里面直接插入HTML
  15. html自适应头
  16. python自动化开发-[第二十三天]-初识爬虫
  17. chromium 使用 flash
  18. mysql数据库解决中文乱码的问题
  19. Queue CodeForces - 353D (思维dp)
  20. 工程中添加工程依赖 Xcode iOS

热门文章

  1. 【python学习笔记01】python的数据类型
  2. linux环境下deb格式文件转换成rpm格式
  3. Remove Element 解答
  4. C语言中不同类型的循环(Different types of loops in C)
  5. android中通过自定义xml实现你需要的shape效果 xml属性配置
  6. MFC多线程内存泄漏问题&解决方法
  7. CentOS 5.7 中文乱码问题解决方案
  8. AAC ADTS解析
  9. 网页 php开发中html空文本节点问题user agent stylesheetbody
  10. MSDTC问题集