浅谈javascript中的call与apply方法

  call方法与apply方法都是为了改变函数体内部this的指向。

  call方法与apply方法,这二者的作用完全一样,只是接受参数的方式不太一样。

  apply()方法:

  Function.apply(obj,args)

  obj将代替Function里的this对象。

  args表示一个数组或者类数组。apply方法把这个集合中的元素作为参数传递给被调用的函数

  call()方法中的第一个参数与apply方法一样,只不过第二个参数则是一个参数列表。

  这里有一点要强调的是,在非严格模式下,当我们第一个参数传递为null或undefined时,函数体内的this会指向默认的宿主对象,在浏览器中则是window

  

  下面来举一个call与apply方法的小例子。

  

  这个例子也许比较简单,再来举另外一个例子:

  

  再来说另外一个知识点。曾经我以为arguments是一个数组,可是今天我才发现,我错了,arguments其实是一个类数组,这里用实例来说明。

  

  可以看出arguments并不具有push方法。

  那么什么是类数组呢?类数组具有以下条件:

  (1)、具有length属性。

  (2)、按索引方式存储数据。

  (3)、不具有数组的push、pop等方法。

  如果这里非要使用push方法,我们可以使用call或者apply方法,那么上面的例子可以稍加修改。

  

  

  总结:

  (1)、每个函数都包含两个非继承而来的方法,即call()方法与apply()方法。

  (2)、call()方法与apply()方法作用相同,都是在特定的作用域中调用函数。

  (3)、接收参数方面不同,apply()接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。而call()方法第一个参数与apply()方法相同,但传递给函数的参数必须列举出来。

 

时间: 07-18

浅谈javascript中的call与apply方法的相关文章

浅谈javascript中的call()和apply()方法

话说在js中,每个函数都包含两个非继承而来的放方法,apply()和call(),使得我们能在特定的作用域中调用函数. 咱先来谈谈其共同点: 先以call为例: window.color = "red"; var o = {color: "blue"}; function sayColor(){ alert(this.color); console.log(this); } sayColor(); //red sayColor.call(this); //red s

浅谈javascript中的call、apply、bind

apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. JavaScript 的一大特点是,函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念. 先来一个栗子: function fruits() {} fruits.prototype = { color: "red", say: function() { console

浅谈JavaScript中的call和apply

语法 fun.apply(thisArg, [argsArray]) fun.call(thisArg, arg1, arg2, ...) apply 接收两个参数,第一个参数指定了函数体内this对象的指向,第二个参数为带下标的集合,这个集合可以为数组,也可以为类数组,apply 方法把这个集合总的元素传递给被调用的函数. call是包装在apply上的语法糖,如果知道具体多少个参数,可以使用call来传递参数,方便表达形参和实参的对应关系. 往往apply和call容易记混淆,不妨使用联想记

浅谈JavaScript中的原型模式

在JavaScript中创建对象由很多种方式,如工厂模式.构造函数模式.原型模式等: <pre name="code" class="html">//工厂模式 function createPerson(name,age,job) { var o = new Object; o.name = name; o.age = age; o.job = job; o.sayName = function() { alert(this.name); } retur

Javascript中call方法和apply方法用法和区别

第一次在博客园上面写博客,知识因为看书的时候发现了一些有意思的知识,顺便查了一下资料,就发到博客上来了,希望对大家有点帮助. 连续几天阅读<javascript高级程序设计>这本书了,逐渐发现了以前很多自己完全没有用过甚至见过的神奇知识点.今天在阅读到有关函数的属性和方法的时候,略感高级,于是乎,查阅了不少他人的博客,在此总结一下这两个方法的以下几个方面: 1.call()和apply()的作用和用法 2.什么时候用apply(),什么时候用call() 书上提到,每个函数都包含两个非继承而来

javascript中的call()和apply()方法的使用

1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象. 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj. apply方法: 语法:apply([thisObj[,argArray]])

移花接木—— 再谈javascript中的 call 与 apply

在JavaScript中,call 和 apply 是Function对象自带的两个方法,这两个方法的主要作用是改变函数中的this指向,从而可以达到`接花移木`的效果.本文将对这两个方法进行详细的讲解,并列出几个关于call和apply的经典应用场景. call(thisArgs [,args...]) 该方法可以传递一个thisArgs参数和一个参数列表,thisArgs指定了函数在运行期的调用者,也就是函数中的this对象,而参数列表会被传入调用函数中.thisArgs的取值有以下4种情况

浅谈JS中的call、apply、bind方法

[前言] 在JavaScript中,call.apply和bind是Function对象自带的三个方法,这三个方法的主要作用是改变函数中的this指向. [区别] [主体] (1)call 语法: call([thisObj[,arg1[, arg2[, [,.argN]]]]]),传递的是参数列表 定义: 调用一个对象的一个方法,以另一个对象替换当前对象. 作用: call 方法可以用来代替另一个对象调用一个方法. call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj

浅谈JavaScript中继承的实现

  谈到js中的面向对象编程,都有一个共同点,选择原型属性还是构造函数,两者各有利弊,而就片面的从js的对象创建以及继承的实现两个方面来说,官方所推荐的是两个相结合,各尽其责,各取其长,在前面的例子中,我已就在JavaScript中对象创建的方法做了一些总结,下面就其继承来道说一二:   1:原型链继承: 每一个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象内部的指针(默认的原型,所有默认类型都继承了Object,而这个继承也是用过原型链实现) fu