//对于 arguments和this, 每个函数都有自己独有的arguments和this, 且不进行链式查找

        //arguments是什么?

        //答:1:arguments是收到的实参副本

        //2:收到实参收集起来,放到一个arguments对象里

        //在词法分析中, 首先按形参形成AO的属性,值为undefined

        //当实参传来时, 再修改AO的相应属性.

        //t(a,b,c){}, 

        //调用时: t(1,2,3,4,5) 个参数

        //此时 , AO属性只有a,bc,3个属性, arguments里有1,3,3,4,5, 所有的值

        //对于超出形参个数之外的实参, 可以通过arguments来获得

        //3:arguments 的索引 从 0, 1,2,....递增,与实参逐个对应

        //4:arguments.length 属性代表实参的个数

        //5:Arguments一定不是数组, 是长的比较像数组的一个对象,虽然也有length属性

        //6:Arguments每个函数都会有,因此,arguemnts只会在内部找自身的arguments,

        //无法引用到外层的arguments

        //function t1(a,b,c)
//{
// alert(arguments[1]) //2
// alert(arguments[4]) //5
// alert(arguments[5]) //6
// alert(a+"==="+b+"==="+c); //1,2,3
//}
//t1(1, 2, 3, 4, 5, 6);
//alert(arguments[1]) //无法引用到外层的arguments //call,apply,bind 区别:
//在JS中,这三者都是用来改变函数的this对象的指向的
// 1、都可以利用后续参数传参。
//2、第一个参数都是this要指向的对象。
//3、都是用来改变函数的this对象的指向的。
// 例如:
var zs = {
name : "张三",
gender : "男",
age : ,
say : function() {
alert(this.name + " , " + this.gender + " ,今年" + this.age);
}
}
var lisi = {
name : "李四",
gender : "女",
age :
}
zs.say(); //显示的肯定是张三 , 男 , 今年20。 那么如何用zs的say方法来显示lisi的数据呢。
// call的用法:
zs.say.call(lisi); //apply的用法:
zs.say.apply(lisi); //而bind需要这样:
zs.say.bind(lisi)(); // 如果直接写zs.say.bind(lisi)是不会有任何结果的,call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数,因此后面还需要()来进行调用才可以。
//再看看下面例子 var zs = {
name : "张三",
gender : "男",
age : ,
say : function(school,grade) {
alert(this.name + " , " + this.gender + " ,今年" + this.age + " ,在" + school + "上" + grade);
}
}
var lisi = {
name : "李四",
gender : "女",
age :
} //可以看到say方法多了两个参数,我们通过call/apply的参数进行传参。
// 对于call来说是这样的 zs.say.call(lisi,"清华大学","一年级"); // 而对于apply来说是这样的 zs.say.apply(lisi,["清华大学","一年级"]); // 区别:call后面的参数与say方法中是一一对应的,而apply的第二个参数是一个数组,数组中的元素是和say方法中一一对应的,这就是两者最大的区别。
//那么bind怎么传参呢?它可以像call那样传参。 zs.say.bind(lisi,"清华大学","一年级")(); //但是由于bind返回的仍然是一个函数,所以我们还可以在调用的时候再进行传参。 zs.say.bind(lisi)("清华大学","一年级");

js 中arguments,call,apply,bind的使用的更多相关文章

  1. js中的call,apply,bind区别

    在JavaScript中,call.apply和bind是Function对象自带的三个方法,这三个方法的主要作用是改变函数中的this指向. call.apply.bind方法的共同点和区别:app ...

  2. js 中 new call apply bind JSON.stringify 的原理以及模拟实现

    1.new的原理和实现 它创建了一个全新的对象. 它会被执行 [[Prototype]](也就是 __proto__)链接. 它使 this指向新创建的对象. 通过 new创建的每个对象将最终被 [[ ...

  3. js中call和apply的实现原理

    js中call和apply的实现原理            实现call的思路: /* 还有就是call方法是放在Function().prototype上的也就是构造函数才有的call方法 (我门可 ...

  4. js中arguments对象和this对象

    js中arguments对象和this属性 如果不注重复习,花时间准备的材料毫无意义 arguments对象和this对象都是对象 直接来代码 <!DOCTYPE html> <ht ...

  5. js中call、apply、bind那些事

    前言 回想起之前的一些面试,几乎每次都会问到一个js中关于call.apply.bind的问题,比如- 怎么利用call.apply来求一个数组中最大或者最小值 如何利用call.apply来做继承 ...

  6. js中call、apply和bind的区别

    在JS中,这三者都是用来改变函数的this对象的指向的,他们有什么样的区别呢.在说区别之前还是先总结一下三者的相似之处:1.都是用来改变函数的this对象的指向的.2.第一个参数都是this要指向的对 ...

  7. js中call、apply、bind那些事2

    前言 回想起之前的一些面试,几乎每次都会问到一个js中关于call.apply.bind的问题,比如… 怎么利用call.apply来求一个数组中最大或者最小值 如何利用call.apply来做继承 ...

  8. js中call、apply和bind到底有什么区别?

    介绍 在js中,每个函数的原型都指向Function.prototype对象(js基于原型链的继承).因此,每个函数都会有apply,call,和bind方法,这些方法继承于Function. 它们的 ...

  9. js中call,apply,bind方法的用法

    call .apply.和bind 以上这三个方法都是js function函数当中自带的方法,用来改变当前函数this的指向. call()方法 语法格式: fun.call(thisArg[,ar ...

随机推荐

  1. 基于 HTML5 结合互联网+的电力接线图

    前言 “互联网+”思维让数据的搜集和获取更加便捷,并且随着大数据的深度开发和应用,数据分析预测对于提升用户体验有非常重要的价值,同时也为不同行业.不同领域的合作提供了更广阔的空间.传统的发电企业是一个 ...

  2. 探寻 JavaScript 精度问题

    阅读完本文可以了解到 0.1 + 0.2 为什么等于 0.30000000000000004 以及 JavaScript 中最大安全数是如何来的. 十进制小数转为二进制小数方法 拿 173.8125 ...

  3. 程序员如何开始做一个自己的 Side Project?

    此系列文章我们开始聊一些软件开发人员如何开始动手写一些自己项目(Side Project)的思路与方法,以及过程中可能需要准备的知识,并分享一些相关的资源给大家. 1. 什么是 Side Projec ...

  4. Web并发页面访问量统计实现

    Web并发页面访问量统计实现 - huangshulang1234的博客 - CSDN博客https://blog.csdn.net/huangshulang1234/article/details/ ...

  5. POJ1094 Sorting It All Out LUOGU 排序

        Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 40012   Accepted ...

  6. elasticsearch6.6及其插件安装记录(较详细)

    借鉴网上资料并实施验证结果 elasticsearch6.6安装 安装包下载路径 https://www.elastic.co/downloads/elasticsearch 本文使用安装包 elas ...

  7. Windows 10 Update

    services.msc Windows Update

  8. iOS 后台调用apns推送

    1.java调用apns推送 2.php 调用apns 推送,可借助终端

  9. centos6/7安装java和maven

    下载安装包并解压到相关目录即可 编辑环境变量vim /etc/profile.d/maven.sh export JAVA_HOME=/app/soft/java-1.8.0_181 export J ...

  10. 2018ICPC青岛现场赛 重现训练

    先贴代码,以及简要题解. 和一个队友下午双排打了一下,队友光速签到,我签的J被嫌弃写得慢以及演员...然后我秒出了E了思路然而难以置信这么简单的思路当时才过了十几个,于是发现D.F不是太好做.最后交了 ...