//对于 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. 在 .NET Core 中结合 HttpClientFactory 使用 Polly(中篇)

    译者:王亮作者:Polly 团队原文:http://t.cn/EhZ90oq声明:我翻译技术文章不是逐句翻译的,而是根据我自己的理解来表述的(包括标题).其中可能会去除一些不影响理解但本人实在不知道如 ...

  2. BS架构和CS架构的区别

    C/S架构的优缺点: *优点: 1.客户端因为是独立设计,所以可以实现个性化 2.因为客户端是需要进行安装的,可以不需要重复安装和加载 3.因为客户端是独立开发的,所以有能力对客户端进行安全设计 4. ...

  3. iview库表table组件内嵌套Select组件

    表格内render函数渲染Select组件   { title: '属性值', key: 'values', render:(h,params)=>{ return h('Select',{   ...

  4. iUAP云运维平台v3.0全面支持基于K8s的微服务架构

    什么是微服务架构? 微服务(MicroServices)架构是当前互联网业界的一个技术热点,业内各公司也都纷纷开展微服务化体系建设.微服务架构的本质,是用一些功能比较明确.业务比较精练的服务去解决更大 ...

  5. (转)JMeter学习逻辑控制器

    JMeter中的Logic Controller用于为Test Plan中的节点添加逻辑控制器. JMeter中的Logic Controller分为两类:一类用来控制Test Plan执行过程中节点 ...

  6. asp.net core源码地址

    https://github.com/dotnet/corefx 这个是.net core的 开源项目地址 https://github.com/aspnet 这个下面是asp.net core 框架 ...

  7. C#、Java和JS实现SHA256+BASE64加密总结

    C#.Java和JS实现SHA256+BASE64加密总结 --莫非(www.muphy.me) 原理 首先,通过编码格式(UTF-8.ASCII等,如果含有汉字等字符,编码格式不同加密结果也不同)获 ...

  8. Magento 2 Block模板终极指南

    /view/frontend/page_layout/2columns-left.xml <layout xmlns:xsi="http://www.w3.org/2001/XMLSc ...

  9. 【WC2018】即时战略

    题目描述 小M在玩一个即时战略(Real Time Strategy)游戏.不同于大多数同类游戏,这个游戏的地图是树形的. 也就是说,地图可以用一个由 n个结点,n?1条边构成的连通图来表示.这些结点 ...

  10. BIOS翻译

    BIOS翻译 BIOS(Basic Input/Output System—基本输入输出系统).BIOS可以视为是一个永久地记录在ROM中的一个软件 Main主要信息 :main 主要信息 advan ...