this软拷贝详解
<script>
if( !Function.prototype.softBind ){ Function.prototype.softBind = function( obj ){ var fn = this;//2、把函数foo的引用赋给fn
//14、把函数foo的引用赋给fn var curried = [].slice.call( arguments, 1 );//3、截取softBind函数参数的第二位并返回一个函数
//15、截取softBind函数参数的第二位并返回一个函数 var bound = function(){//4、声明一个bound函数
//16、声明一个bound函数 return fn.apply(//11、执行fn.apply( obj, [] )
//23、执行fn.apply( obj2, [] )
(!this || this === (window || global)) ?
obj : this,
//核心程序 !this || this === (window || global)) ? obj : this
//判断bound函数内this的指向
//9、this为window,|| true 对象为obj
//21、this为obj2, || false 对象为this => obj2
curried.concat.apply( curried, arguments )//10、所有的参数合并为一个数组
//22、所有的参数合并为一个数组
)
}
//
bound.prototype = Object.create( fn.prototype );//5、函数bound的原型赋值为fn的原型
//17、函数bound的原型赋值为fn的原型
return bound;//6、返回bound函数
//18、返回bound函数
}
} function foo(){//12、输出name: obj1
//23、输出name: obj2
console.log("name: "+this.name);
} var obj1={name:"obj1"},
obj2={name:"obj2"},
obj3={name:"obj3"}; var fooOBJ=foo.softBind(obj1);//1、执行函数,因为每一个函数都有一个softBind方法
//7、fooOBJ = bound; fooOBJ();//8、执行fooOBJ() => bound() obj2.foo=foo.softBind(obj1);//13、执行foo.softBind(obj1)
//19、obj2.foo方法引用为bound函数 obj2.foo();//20、执行obj2.foo() fooOBJ.call(obj3);//【只要改变函数内this的指向就可以改变输出的值】 setTimeout(obj2.foo,1000);//"name: obj1"
/**回调函数相当于一个隐式的传参,如果没有软绑定的话,这里将会应用默认绑定将this绑定到全局环
境上,但有软绑定,这里this还是指向obj1*/
</script>
this软拷贝详解的更多相关文章
- 零拷贝详解 Java NIO学习笔记四(零拷贝详解)
转 https://blog.csdn.net/u013096088/article/details/79122671 Java NIO学习笔记四(零拷贝详解) 2018年01月21日 20:20:5 ...
- Linux使用scp命令进行文件远程拷贝详解
前言 scp是 secure copy的缩写, scp是Linux系统下基于ssh登陆进行安全的远程文件拷贝命令.Linux的scp命令可以在Linux服务器之间复制文件和目录. 使用语法: scp ...
- String 类的实现(2)深度拷贝详解
我们已经知道了浅拷贝存在的问题,即多次析构同一空间.这个问题是类的成员函数引起的,就是前面浅拷贝里相当于编译器自动合成的函数,确切的说,浅拷贝里的问题是由隐士拷贝构造函数和隐士赋值运算符引起的. 拷贝 ...
- js数组和对象相等判断、拷贝详解(结合几个现象讲解引用数据类型的趣事)
序言 最近遇到几个js引用数据类型造成的bug,今天结合bug详细分析一下,避免以后再犯,也希望能帮大家提个醒,强化js基本功. 目录 1.浅拷贝.深拷贝,解决变量赋值相互影响问题 2.判断2个数组. ...
- Netty基础系列(4) --堆外内存与零拷贝详解
前言 到目前为止,我们知道Nio当中有三个最最核心的组件,分别是:Selelctor,Channel,Buffer.在Netty基础系列(3) --彻底理解NIO 这一篇文章中只是进行了大致的介绍. ...
- 【转】 c++拷贝构造函数(深拷贝,浅拷贝)详解
c++拷贝构造函数(深拷贝,浅拷贝)详解 2013-11-05 20:30:29 分类: C/C++ 原文地址:http://blog.chinaunix.net/uid-28977986-id-3 ...
- linux dd命令参数及用法详解---用指定大小的块拷贝一个文件(也可整盘备份)
linux dd命令参数及用法详解---用指定大小的块拷贝一个文件 日期:2010-06-14 点击:3830 来源: 未知 分享至: linux dd命令使用详解 dd 的主要 ...
- 【C++】拷贝构造函数(深拷贝,浅拷贝)详解
一.什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: ; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量. 下面看一个类对 ...
- 软RAID管理命令mdadm详解
软RAID管理命令mdadm详解 mdadm是linux下用于创建和管理软件RAID的命令,是一个模式化命令.但由于现在服务器一般都带有RAID阵列卡,并且RAID阵列卡也很廉价,且由于软件RAID的 ...
随机推荐
- D - Project Presentation(DFS序+倍增LCA)
You are given a tree that represents a hierarchy in a company, where the parent of node u is their d ...
- C++ sizeof 运算符
sizeof 是一个关键字,它是一个编译时运算符,用于判断变量或数据类型的字节大小. sizeof 运算符可用于获取类.结构.共用体和其他用户自定义数据类型的大小. 使用 sizeof 的语法如下: ...
- wireshark的过滤命令
1.ip.addr == 192.168.1.1 这种是目标地址和源地址都是 后面指定的IP
- 微信小程序引用外部js
1.先建立一个common.js, 写我们的外部js 比如: common.js function getTime(){ //下面写我们的代码 .... } function getCity(){ / ...
- 计算 $s=1+(1+2)+(1+2+3)+\cdots+(1+2+3+\cdots+n)$
#include<stdio.h> //编写一个程序,计算 s=1+(1+2)+(1+2+3)+...+(1+2+3+...+n) 的值,要求n从键盘输入. main() { int i, ...
- 【UML】
静态:类图,包图,部署图,构件图,对象图 行为:用例图,活动图,顺序图,状态图,交互图 [类图] http://www.uml.org.cn/oobject/201104212.asp [对象图] h ...
- 把本地的jar包导入到本地的maven仓库,Eclipse可以使用
mvn install:install-file -Dfile=F:/SprintDirectory/ToolsDirectory/libary/fastdfs_client_v1.20.jar -D ...
- deeplearning.ai 卷积神经网络 Week 3 目标检测
本周的主题是对象检测(object detection):不但需要检测出物体(image classification),还要能定位出在图片的具体位置(classification with loca ...
- 整理struct sockaddr和struct sockaddr_in
struct sockaddr定义在/usr/include/linux/socket.h struct sockaddr { unsigned short ss_family; - } struct ...
- Linux和git使用
一.Linux cd . .. - ~ ls -a h l 通配符 mkdir bouch nano vim cat clear cp -r ./db/ ./lib/ mv -r rm -r wh ...