读js框架的时候, apply/call出现的频率很高,于是仔细查阅了一下这方面的资料,终于理解了一些。
apply(thisObj,[arg1,arg2....]):调用一个对象的一个方法,以另一个对象替换当前对象。(英文翻译过来的说法)
我是这样理解的:
1、thisObj作为句柄传入给当前对象方法内部的"this",该"this"就有了thisObj的方法和属性。
2、后面的参数arg1,arg2...都是传递给当前对象的参数。
3、thisObj这个对象也获得了当前对象的属性和方法。例子:
<script language="javascript">
var Person=function(name,age){//person类
this.name=name;
this.age=age;
this.personFun=function(){
alert("I am a Person");
}
this.sayMessage=function(){
alert("I am " +name);
if(this.tall){
//方法内部的this, 获得了thisObj即“OneInPerson”的属性tall
alert("I am " +this.tall+" tall");
}
}
};
var OneInPerson={
name:"OneInPerson",
age:"18",
tall:"170cm"
};
Person.apply(OneInPerson,[OneInPerson.name,OneInPerson.age]);
OneInPerson.sayMessage();
//OneInPerson也获得了当前对象的方法"sayMessage()"
/*相当于有两个对象a(OneInPerson)和b(Person),a先通过apply先把自己的属性和方法(tall)给b,然后a也有了b的方法和属性(sayMessage()),这样很有用,稍微改一下就实现了继承:*/
var Student=function(name,age,grade){
this.grade=grade;
this.sayGrade=function(){
alert("I am " +grade);
}//自己的方法
Person.apply(this,[name,age]);
/* 承上启下的作用:把上文的this给父类,而下文的this便有了父类的属性和方法,即而实现了继承,而对继承的东西再操作,即而实现了覆盖。*/
this.sayMessage=function(){
//覆盖父类Person的sayMessage()
alert("I am a student, " +"my name is "+this.name);
}
};
var stu=new Student("oneStudent","20","大一");
stu.personFun()//继承得到的
stu.sayMessage();//覆盖了
stu.sayGrade();//自己的
/*call()只是参数和apply不同, 其余用法一样。*/
</script>
以上是我个人的理解,不对的地方请大家指教、批评!
分享到:
相关推荐
apply()和call()在JavaScript中非常有用,尤其在需要改变函数内this指向时。比如,在类的方法中,this往往指向实例本身,但在某些情况下,比如事件处理函数中,this可能指向的是触发事件的元素。这时就可以使用call...
JavaScript中call与apply方法
apply/call/bind三者的联系就在于,都可以用来改变函数中 this 指向的值,且第一个参数为要指向的 this 的值,apply的第二个参数(或 bind 与 call 的不定参数)为要传入的参数。这就不得不提及 javascript 中函数的...
淡淡简单描述javascript中方法apply和call
在JavaScript编程中,`apply`、`call`和`bind`这三个方法被广泛用于改变函数内部`this`的指向,这对于理解和编写复杂的JavaScript代码至关重要。虽然它们的功能相似,但在具体用法上存在一定的差异。 #### 相同之处...
主要介绍了JavaScript中的this/call/apply/bind的使用及区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
了解并熟练掌握`this`、`call()`、`apply()`和`bind()`的用法,对于编写复杂的JavaScript代码,尤其是在涉及对象、事件处理和模块化编程时,至关重要。它们提供了控制函数执行上下文的能力,使我们能够灵活地处理...
javascript callApply代码示例
### 理解JavaScript中的`caller`, `callee`, `call`, `apply` #### Arguments对象:JavaScript函数调用的参数管理器 在JavaScript中,每个函数都有一个隐含参数`arguments`,它允许开发者访问传递给函数的所有参数...
在JavaScript中,`call`和`apply`是两个非常重要的方法,它们都用于改变函数调用时的上下文(即`this`的值),并且可以灵活地传递参数。本篇文章将深入探讨这两个方法的用法、区别以及实际应用场景。 `call`方法...
在JavaScript中,`call()`, `apply()`, 和 `bind()` 是三个非常重要的函数,它们都与函数调用有关,但各自有不同的应用场景。本文将深入探讨这三个函数的实现原理及其使用方式。 首先,`call()` 函数允许我们调用一...
总结来说,apply、call和bind是JavaScript中非常重要的函数方法,它们提供了控制函数上下文的能力,无论是直接调用函数、扩展数组元素,还是改变对象的方法调用,这些方法都是不可或缺的工具。掌握它们的用法,能够...
主要介绍了JavaScript中函数(Function)的apply与call理解,本文讲解了JavaScript函数调用分为4中模式以及通过apply和call实现扩展和继承两方面,需要的朋友可以参考下
在JavaScript中,`apply`和`call`是两种非常重要的函数调用方式,它们都用于改变函数内部`this`的指向以及动态传递参数。这两者的主要区别在于参数的传递方式。 首先,`this`在JavaScript中是一个关键字,它在不同...
在JavaScript中,`apply()`和`call()`方法都是用于改变函数调用时的上下文(即`this`关键字指向的对象)以及传递参数。这两个方法都隶属于`Function.prototype`,因此所有函数实例都拥有这两个方法。它们的主要作用...
1、call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有call,apply属性。既然作为方法的属性,那它们的使用...
在JavaScript编程中,apply、call、caller、callee和bind是与函数相关的几个重要概念,它们都与函数的this上下文相关,以及如何控制函数的调用方式。接下来,我们将详细分析这些方法的使用方法和区别。 ### call...