call(),apply()方法和类数组对象arguments

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title></title>
 6     <script type="text/javascript">
 7    /*
 8    call(),apply()
 9    这两个方法都是函数对象的方法,需要通过函数对象来调用
10    当对函数调用call()和apply()都会调用函数执行
11    在调用call()和apply()可以将一个对象指定为第一个参数
12      此时这个对象将会成为函数执行时的this
13     call()方法可以将实参在对象之后依次传递
14     apply()方法需要将实参封装到一个数组中统一传递
15    */
16   function fun(a,b){
17       console.log("a="+a);
18       console.log("b="+b);
19       alert(this.name);//this是call,apply调用时的第一个参数
20   }
21   var obj={name:"wxy"};
22   var obj2={name:"111"};
23   //fun.call(obj);//wxy
24   //fun.call(obj2);//111
25   fun.call(obj,2,3);
26   fun.apply(obj,[2,3]);
27   /*
28   在调用函数时,浏览器每次都会传递进两个隐含的参数,
29   1.函数的上下文对象this
30   2.封装实参的对象arguments
31     arguments是一个类数组对象,它也可以通过索引来操作数据,也可以获取实参的长度
32     在调用函数时,我们所传递的实参都会封装到arguments中
33     我们即使不定义形参,也可以通过arguments来使用实参
34     arguments[0] 表示第一个实参
35     arguments[1] 表示第二个实参
36     arguments有一个属性叫做callee
37     这个属性对应一个函数对象,就是当前正在指向的函数的对象
38   */
39
40  function fun2(){
41      console.log(arguments.length);//2
42      console.log(arguments[0]);//12
43  }
44  fun2(12,3);
45     </script>
46     </head>
47     <body>
48     </body>
49 </html>

原文地址:https://www.cnblogs.com/zuiaimiusi/p/11225176.html

时间: 2024-10-09 09:14:55

call(),apply()方法和类数组对象arguments的相关文章

08.18 javascript 06 数组 数组的概念 创建数组 读取数组中的元素 稀疏数组 添加和删除数组的元素 数组遍历 多维数组 数组的方法 类数组对象 作为数组的字符串

# 数组 ### 数组的概念 * 数组是值的有序集合 * 数组中的每个值 称之为 元素 * 每个元素可以是任意数据类型的值 * 每个元素都有索引(下标) * 元素的索引从0开始,按照顺序递增. 元素最大的索引 2^32-2 ### 创建数组 * 直接量 `[]` * 构造函方式  `new Array()` ### 读写数组中的元素 * 数组名[索引] ### 稀疏数组 * js数组的索引是连续的 * 没有连续的给元素赋值 , 没有赋值的元素会自动赋值 undefined ### 添加和删除 数

Effective JavaScript Item 51 在类数组对象上重用数组方法

Array.prototype对象上的标准方法被设计为也可以在其它对象上重用 - 即使不是继承自Array的对象.因此,在JavaScript中存折一些类数组对象(Array-like Objects). 一个典型的例子是函数的arguments对象,在Item 22中对它进行过介绍.该对象并不继承自Array.prototype,所以我们不能直接调用arguments.forEach来对其中的元素进行遍历.但是,我们可以通过首先得到forEach方法的对象,然后调用call方法(可以参考Ite

[Effective JavaScript 笔记]第51条:在类数组对象上复用通用的数组方法

前面有几条都讲过关于Array.prototype的标准方法.这些标准方法被设计成其他对象可复用的方法,即使这些对象并没有继承Array. arguments对象 在22条中提到的函数arguments对象.它是一个类数组对象,并不是一个标准的数组,所以无法使用数组原型中的方法,因此无法使用arguments.forEach这样的形式来遍历每一个参数.这里我们必须使用call方法来对使用forEach方法. function highlight(){ [].forEach.call(argume

arguments类数组对象

------------   ECMAScript中的所有参数传递的都是值,不可能通过引用传递参数. --------------------------JS函数没有真正意义上的重载. 在函数内部有两个特殊的对象 : arguments和this. 当函数被调用时,传入的参数将保存在arguments类数组对象中,通过arguments可以访问所有该函数被调用时传递给它的参数列表. arguments并不是一个真正的数组,而是一个“类似数组(array-like)”的对象,因为arguments

2、函数内部属性 arguments是类数组对象,主要用途是保存函数参数,但这个对象中有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数

例如:(1).function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } }//此时是递归算法 var trueFactorial=factorial;//将factorial复制给trueFactorial factorial=function(){ return 0; }//覆盖factorial函数 alert(trueFactorial(5));//0;因为辞职factorial

类数组对象 实参对象arguments

先看实参对象arguments 之前对argument有点印象,知道它不是真正的数组,但也可以arguments[0]和arguments.length.今天详细的记录一下. js的默认行为:省略的实参是undefined,多余的实参自动忽略 function a(b,c){ //把类数组对象转为数组 console.log(Array.prototype.slice.call(arguments)); console.log(arguments); console.log('b:'+b+';c

Array.from()方法就是将一个类数组对象或者可遍历对象转换成一个真正的数组。

详解:https://www.cnblogs.com/jf-67/p/8440758.html Array.from()方法就是将一个类数组对象或者可遍历对象转换成一个真正的数组. 1. let arrayLike = { 0: 'tom', 1: '65', 2: '男', 3: ['jane','john','Mary'], 'length': 4 } let arr = Array.from(arrayLike) console.log(arr) // ['tom','65','男',['

类数组对象

JavaScript中有一些看起来像却又不是数组的对象,我们称之为类数组. 定义 类数组对象具有两个特性: 1)具有:具有index和length属性: 2)不具有:不具有数组的操作方法,比如push,shift等. js中有两个最典型的类数组对象:arguments和HTMLCollection集合(即通过getElementByTagName这类方法获得的集合).以下以arguments为例,讲解类数组对象的一些用法. 常见用法 [index和length] index和length用法很简

观V8源码中的array.js,解析 Array.prototype.slice为什么能将类数组对象转为真正的数组?

在官方的解释中,如[mdn] The slice() method returns a shallow copy of a portion of an array into a new array object. 简单的说就是根据参数,返回数组的一部分的copy.所以了解其内部实现才能确定它是如何工作的.所以查看V8源码中的Array.js     可以看到如下的代码: 一.方法  ArraySlice,源码地址,直接添加到Array.prototype上的"入口",内部经过参数.类型