博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[].slice.call(arguments,1)
阅读量:4952 次
发布时间:2019-06-11

本文共 1321 字,大约阅读时间需要 4 分钟。

【转】

前言

今天偶然翻资料看到一个叫做软绑定的函数,用来确定this的;

原代码

1  if(!Function.prototype.softBind){ 2            Function.prototype.softBind = function(obj){ 3                var fn = this; 4                var curried = [].slice.call(arguments,1); 5                var bound = function(){ 6                    return fn.apply( 7                        (!this || this === (window || global)) ? obj:this, 8                        curried.concat.apply(curried,arguments); 9                    )10                };11                bound.prototype = Object.create(fn.prototype);12                return bound;13            }14        }

 

看到[].slice.call(arguments,1) 这个写法我一脸懵逼,为何?

arguments是一个对象而不是数组..而且自身的原型链上也没有slice这个方法;


个人见解

  • []自身也是也是一个对象.而数组原型链上有这个slice这个方法,通过call显式绑定来实现arguments变相有slice这个方法
    1 /*此处的返回值是true*/ 2    [].slice === Array.prototype.slice; 3  4    /*确定arguments的类型 5     * 返回 3,Object, true; 6     */ 7     (function(a,b,c){ 8        console.log(arguments.length); 9        console.log(typeof arguments);10        console.log( arguments instanceof Object);11 12     }(1,2,3))13 14 15    /*我们自身也可以模拟一个对象传入,我们这里用数组对象,不是等同,只是道理差不多的*/16    aargument =  [1,2,3,4];17    [].slice.call(aargument,3);   //返回[4]18    [].slice.call(aargument,1,3); //[2, 3]

    总结

    那个写法就是裁切arguments传入的参数,保存起来操作;

 

转载于:https://www.cnblogs.com/oklfx/p/8127373.html

你可能感兴趣的文章
delphi之模糊找图
查看>>
transitionFromViewController方法的使用
查看>>
.NET终于也沦陷了
查看>>
这个我觉得是苹果的一个严重坏影响
查看>>
shell:crontab
查看>>
v$与v_$视图 关系
查看>>
剑指Offer——二维数组中的查找
查看>>
PHPCMS几个有用的全局函数
查看>>
css3放大效果
查看>>
Android NDK builder for Eclipse in Windows
查看>>
wildfly 在 jee war 外部写配置文件
查看>>
白牌交换机现状分析zz
查看>>
数据表示和基本运算第一弹
查看>>
用 LaTeX 排版编程技术书籍的一些个人经验
查看>>
Unity3D笔记十九 持久化数据
查看>>
TensorFlow笔记-01-开篇概述
查看>>
phpunit——执行测试文件和测试文件中的某一个函数
查看>>
jquery.cookie.js 的配置
查看>>
序列化,json pickle,shelve
查看>>
【C#】C#格式化文件大小
查看>>