call、apply、bind
2020-08-23 21:24
1181 查看
call()
//初级版 Function.prototype.call = function call(context,...args){ let result; context.xx = this; result = context.xx(...args); delete context.xx; return result; } =============================================================== //中级版 Function.prototype.call = function call(context,...args){ let result, key = Symbol('key') //保证属性的唯一性,防止有重名属性被覆盖 context[key] = this; result = context[key](...args); delete context[key]; return result; } =============================================================== //终极版 Function.prototype.call = function call(context,...args){ //如果为null 或 undefined,则指向window context = context == null ? window:context; //如果为基本数据类型,则转化为object(context) if(!/^(object|function)$/i.test(typeof context)){ context = Object(context) } let result, key = Symbol('key') //保证属性的唯一性,防止有重名属性被覆盖 context[key] = this; result = context[key](...args); delete context[key]; return result; }
apply
和call
的区别仅仅是传参不同!apply
传数组
bind()
Function.prototype.bind = function bind(context,...outerArgs){ let _this = this; return function(...innerArgs){ _this.call(context,...outerArgs.concat(innerArgs)) } }
相关文章推荐
- Javascript中call,apply,bind方法的详解与总结
- 理解JS中的call、apply、bind方法
- javascript中call,apply,bind函数用法示例
- JavaScript中call,apply,bind方法的总结
- 手动实现一个js的call, apply, bind, instanceof方法
- apply、call、bind小结
- 深入浅出妙用 Javascript 中 apply、call、bind
- js apply/call/caller/callee/bind使用方法与区别分析
- [转]深入浅出妙用 Javascript 中 apply、call、bind
- call、apply和bind方法的用法以及区别
- Javascript中的Bind,Call和Apply
- 开启Javascript中apply、call、bind的用法之旅模式
- call,apply和bind的区别
- call/apply/bind 的理解与实例分享
- JavaScript---浅谈函数this指向之 call()、apply()、bind()方法
- call 和 apply 和 bind的区别
- new、call、apply、bind实现的原理,是你理解的那样吗?
- JS中的call、apply、bind方法
- JS修改this的方法bind、apply、call的理解
- 深入浅出 妙用Javascript中apply、call、bind