<script>
function foo(p1,p2) {
this.val = p1 + p2;
}
var bar = foo.bind(this, "p1");
//bar = fToBind.apply(this instanceof fNOP &&
//oThis ? this : oThis || window,
//aArgs.concat(Array.prototype.slice.call(arguments)));
var baz = new bar("p2");//(柯里化)new
console.log(baz.val);//p1p2
if (!Function.prototype.bind) {//为了判断浏览器是否支持bind()函数
Function.prototype.bind = function (oThis) {
if (typeof this !== 'function') {//因为call和apply的存在,可以将this指向其他对象,如foo.bind.call(obj),就是为了防止此情况的出现
throw new TypeError('调用者不是当前函数对象');
}
var aArgs = Array.prototype.slice.call(arguments, 1);//从传进的参数中截取第一个(this)参数后面的参数
fToBind = this,
fNOP = function () { },//这个的作用相当于事例对象的构造函数,because
fBound = function () {
return fToBind.apply(this instanceof fNOP && oThis ? this : oThis || window,//&&优先级高于?: 这里的this指向的是fBound
aArgs.concat(Array.prototype.slice.call(arguments)));
};
            //this instanceof fNOP判断fNOP是否是this的构造函数,是为了确保是在原对象的基础上继续添加的参数
fNOP.prototype = this.prototype;
fBound.prototype = new fNOP();
return fBound;
};
}
</script>

  

最新文章

  1. Windows 7 下如何设置机器级别的DCOM权限
  2. iOS - Swift 与 C 语言交互编程
  3. 一款jQuery实现重力弹动模拟效果特效,弹弹弹,弹走IE6
  4. Socket的使用
  5. jitsi-meet
  6. iOS开发-相关文档
  7. 普通用户登录PLSQL后提示空白OK对话框错误
  8. 【计算几何初步-代码好看了点线段相交】【HDU2150】Pipe
  9. Android常见布局问题
  10. mysql 时间
  11. java 第三次作业
  12. STL初始化initializer_list
  13. spring boot 操作MySQL pom添加的配置
  14. 五、u-boot 启动流程---u-boot.lds
  15. Linux CentOS 7 &amp; JDK 1.7 安装与配置
  16. python里的字典和集合
  17. JDK提供的四种线程池
  18. NET MVC全局异常处理(一) 【转载】网站遭遇DDoS攻击怎么办 使用 HttpRequester 更方便的发起 HTTP 请求 C#文件流。 Url的Base64编码以及解码 C#计算字符串长度,汉字算两个字符 2019周笔记(2.18-2.23) Mysql语句中当前时间不能直接使用C#中的Date.Now传输 Mysql中Count函数的正确使用
  19. 常用sqoop操作
  20. java switch参数类型

热门文章

  1. ofstream和ifstream详细用法
  2. sql server 2008 对字段的操作
  3. 宇视4G设备采用GB/T28181协议成功接入EasyGBS国标流媒体平台的设置流程
  4. js获取滚动条的位置
  5. 1*SUM(i) 开源社区
  6. 保存到properties
  7. Redis作者谈Redis应用场景(转)
  8. Windows Server 2012 下安装MySQL 5.6 X64位包
  9. MySQL root用户忘记密码怎么办?修改密码方法:skip-grant-tables
  10. 数据库之MySQL(一)