//对于 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. vue-cli3

    官网 https://cli.vuejs.org/zh/ ie11 的问题 https://stackoverflow.com/questions/52056358/vue-cli-3-project ...

  2. linux 下一些命令

    1. 后台执行命令 nohup  http://blog.csdn.net/liuyanfeier/article/details/62422742 2. 查看日志文件 格式:tailf logfil ...

  3. ORM框架SQLAlchemy

    SQLAlchemy orm英文全称object relational mapping,就是对象映射关系程序,简单来说就是类似python这种面向对象的程序来说一切皆对象,但是使用的数据库却都是关系型 ...

  4. mysql监控每一条执行的sql语句

    查看日志配置是否打开 SHOW VARIABLES LIKE "general_log%"; SET GLOBAL general_log = 'ON';   打开日志 SET G ...

  5. springboot的热部署

    SpringBoot 4.SpringBoot 整合 devtools 实现热部署   一.添加 devtools 依赖 <!-- Spring boot 热部署 : 此热部署会遇到 java. ...

  6. Shell命令-系统信息及显示之uname、hostname

    文件及内容处理 - uname.hostname 1. uname:显示系统信息 uname命令的功能说明 uname 命令用于显示系统信息.uname 可显示电脑以及操作系统的相关信息 uname命 ...

  7. webpack4 学习 --- webpack和webpack-dev-server

    以前了解过webpack2, 所以对webpack 不是很陌生,就直接入主题吧.新建一个文件夹,就叫它webpack-tut吧.然后在文件中新建一个src 文件夹,存放我们的源文件,再在src 文件夹 ...

  8. vue中@contextmenu在pc和mac中的区别

    项目中有用到右键菜单,故用了@contextmenu,由于本人是用的PC电脑,所以一切正常, 但是有同事用mac测试了一下,问题随之而来,MAC上右键按下就触发了, PC上面是鼠标抬起才会触发,所以这 ...

  9. TortoiseGit安装、配置

    1 TortoiseGit简介 tortoiseGit是一个开放的git版本控制系统的源客户端,支持Winxp/vista/win7.该软件功能和git一样 不同的是:git是命令行操作模式,tort ...

  10. Linux-监控目录及文件

    Linux-通过inotifywait监控目录及文件 inotifywait命令的使用此处就不写了:可以参考文章:https://www.cnblogs.com/martinzhang/p/41269 ...