目录

apply

简单说:构建一个和调用aplly函数一样的字符串,用eval执行,完了之后删除掉,最后返回执行的结果。

Function.prototype.applyCopy = function() {
var obj = arguments[0];
obj.fn = this;
var args = arguments[1]; if(!args || args.length == 0) return obj.fn(); // obj.fn参数
var argsStr = ''; for(var i in args) {
argsStr += '"' + arguments[1][i] + '",';
} var result = eval('obj.fn('+argsStr.replace(/,$/, '')+')'); delete obj.fn;
return result;
};

call

Function.prototype.callCopy = function() {
var obj = [].shift.applyCopy(arguments);
return this.applyCopy(obj, arguments);
}

bind

Function.prototype.bindCopy = function() {
var _this = this;
var obj = arguments[0];
return function() {
return _this.applyCopy(obj, arguments);
}
}

demo

var s = {
desc: 's.desc',
name: '你好',
} var name = 'window';
var desc = 'window => this' function sayHi(age, type) {
return {
name: this.name,
desc: this.desc,
age: age,
type: type
}
} console.log(sayHi(12,'sayHi'));
console.log(sayHi.applyCopy(s, [12, 'applyCopy']));
console.log(sayHi.callCopy(s, 12, 'callCopy'));
console.log(sayHi.bindCopy(s)(12, 'bindCopy'));

总结:apply是基础,call,bind都是在apply的基础上实现的。

最新文章

  1. C#委托使用详解(Delegates)
  2. SQL SERVER四舍五入你除了用ROUND还有其他方法吗?
  3. OJ上 G++ 与 C++ 的区别
  4. ubuntu14.04安装MATLAB R2014a
  5. 总线(BUS)和总线操作
  6. visio 改变画布大小
  7. VB6-系统打印常识
  8. ANDROID_MARS学习笔记_S03_006_geocoding、HttpClient
  9. 执行curl -sSL 提示curl: (35) SSL connect error
  10. bootstrap注意事项(一)
  11. PHP弱类型:WordPress Cookie伪造
  12. 用call/cc合成所有的控制流结构
  13. sci-hub 下载地址更新
  14. gulp安装搭建前端项目自动化
  15. linux gzip 命令详解
  16. spring cloud 注册、发现、消费、负载均衡
  17. hdu-3397 Sequence operation 线段树多种标记
  18. 【总结】对FFT的理解 / 【洛谷 P3803】 【模板】多项式乘法(FFT)
  19. Spring WebSocket入门(一) 转载
  20. 软工实践Beta冲刺(5/7)

热门文章

  1. 用NumPy genfromtxt导入数据
  2. TensorRT原理图示
  3. ARM Cortex-M嵌入式C基础编程(上)
  4. 重新整理 .net core 实践篇—————文件系统[二十二]
  5. 实验1、初入Flask
  6. 在Intellij IDEA中查看TestNG自带的测试报告
  7. DOS命令行(2)——Windows磁盘维护与管理
  8. MySQL:一条更新语句是如何执行的
  9. sleep、wait方法之间区别
  10. MySQL 为什么使用 B+ 树来作索引?