js实例教程-apply,call,bind用js原生实现(代码实例)

发布时间:2018-11-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了js实例教程-apply,call,bind用js原生实现(代码实例)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。

apply,call,bind用js原生实现(代码实例)

 // apply第一个参数是函数的执行环境this,第二个参数是一个数组,这个数组会自动散开成为函数的参数 Function.PRototyPE.apply = function (x, y) {   x = x || window   y = y || []   x._apply = this // this为当前函数:使函数指向x   if (!x._apply) {  // 如果作用域x不可修改:则给它的原型添加函数     x.constructor.prototype._apply = this   }   VAR r , j = y.length   swITch (j) {     case 0: r = x._apply(); break     case 1: r = x._apply(y[0]); break     case 2: r = x._apply(y[0], y[1]); break     case 3: r = x._apply(y[0], y[1], y[2]); break     case 4: r = x._apply(y[0], y[1], y[2], y[3]); break     default: r = eval(&#39;x._apply(' + y.join() + ')'); break  // eval执行效率底,所以先用jS写常用的调用   }   try {     delete x._apply ? x._apply : x.constructor.prototype._apply // 删除为了修改函数作用域的临时指向   } catch (e) {}   return r  //返回函数执行的结果 } // call 第一个参数是函数的执行环境this,从第二个参数开始都是给函数的参数 Function.prototype.call = function () {   let len = arguments.length - 1, x = args[0], y = []   for (let i = 0; i < len; i++) {  // 把arguments类数组对象转化为数组 可以简写为:[].slice.apply(arguments, 1)     y[i] = arguments[i + 1]    }   return this.apply(x, y) } // bind 修改函数的执行环境,返回一个新函数,参数和call一样 Function.prototype.bind = function () {   // 形成一个闭包,返回一个行函数   let x = arguments[0], len = 0, y = [], i, j, fn = this   for (i = 0, len = arguments.length - 1; i < len; i++) {     y[i] = arguments[i + 1]   }   return function () {     for (j = 0, len = arguments.length; j < len;) {       y[y.length] = arguments[j++]     }     return fn.apply(x, y)   } }

apply,call,bind用js原生实现(代码实例)

 // apply第一个参数是函数的执行环境this,第二个参数是一个数组,这个数组会自动散开成为函数的参数 Function.prototype.apply = function (x, y) {   x = x || window   y = y || []   x._apply = this // this为当前函数:使函数指向x   if (!x._apply) {  // 如果作用域x不可修改:则给它的原型添加函数     x.constructor.prototype._apply = this   }   var r , j = y.length   switch (j) {     case 0: r = x._apply(); break     case 1: r = x._apply(y[0]); break     case 2: r = x._apply(y[0], y[1]); break     case 3: r = x._apply(y[0], y[1], y[2]); break     case 4: r = x._apply(y[0], y[1], y[2], y[3]); break     default: r = eval('x._apply(' + y.join() + ')'); break  // eval执行效率底,所以先用js写常用的调用   }   try {     delete x._apply ? x._apply : x.constructor.prototype._apply // 删除为了修改函数作用域的临时指向   } catch (e) {}   return r  //返回函数执行的结果 } // call 第一个参数是函数的执行环境this,从第二个参数开始都是给函数的参数 Function.prototype.call = function () {   let len = arguments.length - 1, x = args[0], y = []   for (let i = 0; i < len; i++) {  // 把arguments类数组对象转化为数组 可以简写为:[].slice.apply(arguments, 1)     y[i] = arguments[i + 1]    }   return this.apply(x, y) } // bind 修改函数的执行环境,返回一个新函数,参数和call一样 Function.prototype.bind = function () {   // 形成一个闭包,返回一个行函数   let x = arguments[0], len = 0, y = [], i, j, fn = this   for (i = 0, len = arguments.length - 1; i < len; i++) {     y[i] = arguments[i + 1]   }   return function () {     for (j = 0, len = arguments.length; j < len;) {       y[y.length] = arguments[j++]     }     return fn.apply(x, y)   } }

觉得可用,就经常来吧!Javascript技巧 脚本宝典 欢迎评论哦!&nbsp;js技巧,巧夺天工,精雕玉琢。小宝典献丑了!

脚本宝典总结

以上是脚本宝典为你收集整理的js实例教程-apply,call,bind用js原生实现(代码实例)全部内容,希望文章能够帮你解决js实例教程-apply,call,bind用js原生实现(代码实例)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。