`
shangjunhong
  • 浏览: 14188 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

javascript中apply/call的理解

阅读更多
读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>

以上是我个人的理解,不对的地方请大家指教、批评!
分享到:
评论

相关推荐

    javascript中apply/call和bind的使用

    apply()和call()在JavaScript中非常有用,尤其在需要改变函数内this指向时。比如,在类的方法中,this往往指向实例本身,但在某些情况下,比如事件处理函数中,this可能指向的是触发事件的元素。这时就可以使用call...

    JavaScript中call与apply方法

    JavaScript中call与apply方法

    浅谈JavaScript中的apply/call/bind和this的使用

    apply/call/bind三者的联系就在于,都可以用来改变函数中 this 指向的值,且第一个参数为要指向的 this 的值,apply的第二个参数(或 bind 与 call 的不定参数)为要传入的参数。这就不得不提及 javascript 中函数的...

    淡淡简单描述javascript中方法apply和call

    淡淡简单描述javascript中方法apply和call

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

    在JavaScript编程中,`apply`、`call`和`bind`这三个方法被广泛用于改变函数内部`this`的指向,这对于理解和编写复杂的JavaScript代码至关重要。虽然它们的功能相似,但在具体用法上存在一定的差异。 #### 相同之处...

    JavaScript中的this/call/apply/bind的使用及区别

    主要介绍了JavaScript中的this/call/apply/bind的使用及区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    JavaScript中的this/call/apply/bind

    了解并熟练掌握`this`、`call()`、`apply()`和`bind()`的用法,对于编写复杂的JavaScript代码,尤其是在涉及对象、事件处理和模块化编程时,至关重要。它们提供了控制函数执行上下文的能力,使我们能够灵活地处理...

    javascript callApply代码示例

    javascript callApply代码示例

    理解JavaScript的caller callee call apply

    ### 理解JavaScript中的`caller`, `callee`, `call`, `apply` #### Arguments对象:JavaScript函数调用的参数管理器 在JavaScript中,每个函数都有一个隐含参数`arguments`,它允许开发者访问传递给函数的所有参数...

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

    在JavaScript中,`call`和`apply`是两个非常重要的方法,它们都用于改变函数调用时的上下文(即`this`的值),并且可以灵活地传递参数。本篇文章将深入探讨这两个方法的用法、区别以及实际应用场景。 `call`方法...

    js代码-JavaScript的call/apply/bind函数实现

    在JavaScript中,`call()`, `apply()`, 和 `bind()` 是三个非常重要的函数,它们都与函数调用有关,但各自有不同的应用场景。本文将深入探讨这三个函数的实现原理及其使用方式。 首先,`call()` 函数允许我们调用一...

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

    总结来说,apply、call和bind是JavaScript中非常重要的函数方法,它们提供了控制函数上下文的能力,无论是直接调用函数、扩展数组元素,还是改变对象的方法调用,这些方法都是不可或缺的工具。掌握它们的用法,能够...

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

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

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

    在JavaScript中,`apply`和`call`是两种非常重要的函数调用方式,它们都用于改变函数内部`this`的指向以及动态传递参数。这两者的主要区别在于参数的传递方式。 首先,`this`在JavaScript中是一个关键字,它在不同...

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

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

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

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

    js apply/call/caller/callee/bind使用方法与区别分析

    在JavaScript编程中,apply、call、caller、callee和bind是与函数相关的几个重要概念,它们都与函数的this上下文相关,以及如何控制函数的调用方式。接下来,我们将详细分析这些方法的使用方法和区别。 ### call...

Global site tag (gtag.js) - Google Analytics