`

JavaScript之Function的apply与call

 
阅读更多

JavaScript函数调用分为4中模式:

1. 方法调用模式:即对象包含方法属性,Obj.methodName()或者Obj[methodName]()

2. 函数调用模式:即methodName()

3. 构造器调用模式:即new MethodName()

4. applycall调用模式:即ObjA.apply(ObjB,args[])或者ObjA.call(ObjB,arg1,arg2...)

函数调用时,除了接收形式参数外,还会接收thisarguments。其中this为函数对象上下文,arguments为实际参数。

applycall实现同样的功能,即切换函数对象的上下文(this指向的引用),区别在于形式参数不一样。applyarguments或者数组,call为以逗号隔开多个单独形式参数。

function add(c)
{
   alert(this.a+this.b+c);
}
var test={a:1,b:2}
add.call(test,3); 

 在执行add.call(test,3); 之前add和test都属于window下,此时this指向window。add.call(test,3); 执行时,进入add方法体,此时this由window切换为test,此时this.a=test.a,this.b=test.b,c为形式参数传入的值,即alert()的结果为1+2+3=6。apply也是一样的功能。

 

通过apply和call实现扩展和继承:

 function Animal(name){    
     this.name = name;    
     this.showName = function(){    
         alert(this.name);    
     }    
 }    
   
 function Cat(name){  
     Animal.call(this, name);
 }    
   
 var cat = new Cat("Black Cat");//执行时,Cat函数体的this由window切换为Cat{},
// Animal函数体的this.name通过形式参数传入即为Black Cat,最终cat
 //得到的结果为cat=Cat{name:"Black Cat",showName: function(){ alert(this.name);},
 cat.showName();//执行时this由window切换为
 //Cat{name:"Black Cat",showName: function(){ alert(this.name);} 此时this.name
 //为this.name=Cat.name,因此为Black Cat。

 

分享到:
评论

相关推荐

    JavaScript中函数(Function)的apply与call理解

    主要介绍了JavaScript中函数(Function)的apply与call理解,本文讲解了JavaScript函数调用分为4中模式以及通过apply和call实现扩展和继承两方面,需要的朋友可以参考下

    JavaScript中的apply和call函数详解_.docx

    `apply`与`call`相似,但参数传递方式不同: ```javascript function.apply(thisArg, [argsArray]) ``` `apply`也接收`thisArg`作为第一个参数,但第二个参数`argsArray`必须是一个数组或类数组对象,它的所有元素会...

    关于Javascript中call与apply的进一步探讨

    `apply`方法与`call`类似,主要区别在于传递参数的方式。`apply`接受两个参数:第一个参数同样是`this`值,第二个参数是一个数组或类数组对象,其中的元素作为函数的参数: ```javascript func.apply(thisArg, ...

    开启Javascript中apply、call、bind的用法之旅模式

    为了控制函数的this指向,JavaScript提供了apply、call以及bind方法。以下详细解释了apply、call以及bind的用法,并通过实例加深理解。 1. apply()和call()方法 apply()和call()方法都用于指定函数体内this的值。...

    js中apply与call简单用法详解.docx

    在JavaScript中,`apply`与`call`是两个非常重要的函数,它们都属于`Function.prototype`的一部分,因此每一个函数对象都拥有这两个方法。这两个方法的主要作用在于改变函数执行时的上下文环境(`this`值),这对于...

    javascript技术难点(三)之this、new、apply和call详解

    JavaScript中的this、new、apply和call是理解JavaScript面向对象编程的关键知识点。首先,我们要知道,this关键字在JavaScript中表示当前上下文的对象,但它并不像Java中的this那样始终指向同一个对象。JavaScript的...

    javascript中apply、call和bind的用法区分_.docx

    ### JavaScript中apply、call和bind的用法区分 在JavaScript编程中,`apply`、`call`和`bind`这三个方法被广泛用于改变函数内部`this`的指向,这对于理解和编写复杂的JavaScript代码至关重要。虽然它们的功能相似,...

    javascript中apply和call方法的作用及区别说明

    1、call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有call,apply属性。既然作为方法的属性,那它们的使用...

    理解JavaScript的caller callee call apply

    `call`和`apply`是`Function.prototype`上的两个方法,它们允许开发者以不同的上下文(`this`值)调用函数,并提供参数。这两个方法的主要区别在于参数的传递方式: 1. **`call`方法**:接收一个`this`值作为第一个...

    JavaScript中apply与call的用法意义及区别说明

    apply和call,它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数的方式有所区别: Function.prototype.apply(thisArg,argArray); Function.prototype.call(thisArg[,arg1[,arg2…]]); 从函数原型...

    详解js中的apply与call的用法.docx

    `apply`方法与`call`类似,但它是接收一个数组或类数组对象作为参数,而不是逐个列出参数。其语法如下: ```javascript function.apply(thisArg, [argsArray]) ``` `argsArray`是一个数组或类数组对象,其元素会被...

    简单对比分析JavaScript中的apply,call与this的使用

    在JavaScript中,`apply`、`call`和`this`都是与函数调用相关的概念,它们主要用于控制函数内部`this`的指向以及参数的传递。理解这三个概念对于编写高效的JavaScript代码至关重要。 首先,`apply`和`call`都是函数...

    跟我学习javascript的call(),apply(),bind()与回调

    本文将详细解释JavaScript中call(), apply(), 和 bind() 方法的作用、语法以及使用场景,并且会探讨回调函数的使用,帮助理解这些概念在实际编程中的应用。 首先,我们来探讨call() 和 apply() 方法。这两个方法都...

    Javascript - 全面理解 caller,callee,call,apply (转载)

    `apply`与`call`相似,只是传递参数的方式不同: ```javascript sayHello.apply(obj, ['World']); // 输出 "Hello, World" ``` 在这两个示例中,`obj`作为`sayHello`函数的上下文,使得`this.name`能够正确地引用`...

    JavaScript中的apply和call函数详解

    apply()和call()方法是Function对象的方法,这意味着它们是每个JavaScript函数都具备的。在多数情况下,函数的this指向全局对象(在浏览器中是window),但如果你需要让this指向其他对象,就可以使用apply()或call()...

    浅谈javascript中的call、apply、bind_.docx

    JavaScript 中的 call、apply、bind 方法是 Function 对象自带的三个方法,这三个方法的主要作用是转变函数中的 this 指向,从而可以达到“接花移木”的效果。下面将对这三个方法进行具体的讲解,并列出几个经典应用...

    js中call与apply的用法小结

    在JavaScript中,`call` 和 `apply` 是两种非常重要的函数调用方式,它们都用于改变函数执行时的上下文,即`this`的指向。本文将深入探讨这两种方法的用法及其在实际编程中的应用。 ### 1. `call` 的基本用法 `...

    深化理解关于javascript中apply()和call()方法的区分_.docx

    在JavaScript中,`apply()`和`call()`方法都是用于改变函数调用时的上下文(即`this`关键字指向的对象)以及传递参数。这两个方法都隶属于`Function.prototype`,因此所有函数实例都拥有这两个方法。它们的主要作用...

Global site tag (gtag.js) - Google Analytics