bind方法 一种我们忽略的继承
来源:互联网 发布:程序员工作经验怎么写 编辑:程序博客网 时间:2024/05/21 01:46
我们之前说过了call和apply两者的区别仅仅是第二参数的不同,call对的第二个参数 可以是任意字符,apply的第二个参数必须是数组。当然,第二个参数视需求而定,是可选的。
今天本来想写一个放大镜的效果,再找参考资料的时候 无意发现了一个bind方法,看到解释让我甚是感兴趣,改变函数对象内部的this指向。IE8以下不兼容:
"use strict"; var pi = 99; var uk = { pi:888, app:function(){ return function(){ console.log(this.pi); } }, kk:{ pi:1235 } }; function uxc(){} uxc.prototype = { pi:9527 } uk.kk = new uxc; var ii = uk.app().bind(uk.kk); ii();
打印出来是95278,重点就是这句话起作用了:
uk.kk = new uxc;
改变了kk.pi变成9527;
bind返回的是函数,call和apply返回的是结果。
所以后面我还ii();执行了一下。
不过很多朋友推荐使用call和apply我觉得也是兼容好,而且利索。性能也比bind高。但是有一些情况还是会遇到使用bind的.下面下一个兼容:
if (!Function.prototype.bind) { Function.prototype.bind = function(obj) { var _self = this ,args = arguments; return function() { _self.apply(obj, Array.prototype.slice.call(args, 1)); } }}
_self.apply(obj, Array.prototype.slice.call(args, 1));最后还是用到了apply和call方法来。
Array.prototype.slice.call(args, 1) //返回一个空数组.<pre name="code" class="javascript">console.log(Object.prototype.toString.call(Array.prototype.slice.call(arr,0))=="[object Array]");//true apply一下 this就是obj了 接着再返回。
0 0
- bind方法 一种我们忽略的继承
- 一种构造组合方法以及bind的一种用法
- 一种容易被忽略的盗QQ方法
- 我们都忽略了Html5的力量,如果只看成一种技术就大错特错了!
- 转载:javascript 继承实现的一种方法
- Javascript实现继承的一种方法
- 我们忽略的八个哲理
- 发现一种JavaScript“类的继承”的方法
- 继承的一种应用
- c++类防止被继承的一种方法
- 创建线程的第一种方法:继承Thread类
- eclipse 与资源库同步时忽略多余文件的一种方法
- MFC中使用boost::bind进行多线程编程的一种方法
- 那些我们容易忽略的好点子
- 被我们忽略的HttpSession线程安全问题
- 天赋!被我们忽略的财富!
- 函数的bind方法
- 配置数据的继承(默认数据),类似子类继承父类的一种方法。
- Python自省(反射)指南
- 2014.4新版uboot启动流程分析
- Android中dp和px之间进行转换
- 在WebView中如何让JS与Java安全地互相调用
- lemon oa前端页面——自定义标签
- bind方法 一种我们忽略的继承
- js中的替换
- Mysql常用DBA命令
- android 事件处理机制之requestDisallowInterceptTouchEvent
- 内存泄漏分类
- iOS开发之手势gesture详解
- 一些易忽视的c知识点,顺便测测你的c水平
- centOS目录结构详细版
- 解说== frameworks/base/cmds/app_process/