zoukankan      html  css  js  c++  java
  • 关于 js 中的 call 和 apply使用理解

      在学习新的东西时候,碰到以前看过而又不理解,或则记忆不深的地方不妨回头看看书里知识点,有助于加深理解。正所谓--温故而知新。

      废话不多说,直接上代码:

      第一节:一个简单的例子
         function add(a,b){
             console.log(a+b);
         }
    
         function sub(a,b){
             console.log(a-b);
         }
    
         add.call(sub,3,2); //5

      总结:以上代码 定义两个方法,而最后一句话,不妨理解为 sub对象 调用了 add对象 的方法,并把参数也带入方法里。

     第二节:深入理解 call 和 apply

      call 和 apply的定义说明:call和apply 是函数的非继承方法,在某个特定作用范围内调用某个函数,设置函数体内this对象的值,

         function NJie(){
             this.name = "Njie",
             this.sayName = function(){
                 console.log(this.name);
             }
         }
    
         function KK(){
             this.name ="KK";
         }
    
         var n = new NJie();
         var k = new KK();
    
         n.sayName(); //NJie
         n.sayName.call(k); //KK

      总结:比如说:k 对象没有 sayName 的函数,而 n 有这个函数,那 k 就通过call 来借 n的 sayName使用,当然也要把在 k 中的值带入到方法里。

    第三节:call 和 apply 的 区别

      说明:call 和 apply 的区别,在于两个传入的参数的方式不一样

      

        // 父类
         function Person(name,age){
             this.name = name;
             this.age = age;
         }
    
         //子类 学生
         function Student(name,age,grade){
    
             Person.apply(this,arguments);  //子类继承了父类
             // Person.call(this,name,age);  //当然,也可以使用 call的方法
             this.grade = grade;
         }
    
         //创建一个学生的实例
         var s1 = new Student("倪杰","23","北京大学成人班,一年级");
    
         console.log("您好,",s1.name,"您今年",s1.age,"岁,就读于",s1.grade,",实在太棒了");

      总结:

        以上的例子有两个要点:

          1,是可以使用 call的方法来做 js 的继承处理;

          2,call 和 apply 的区别主要是在于后面的传入参数方式不同,call传参数要把参数一一列出来,而apply则可以使用 arguments 这个属性直接带过去.

      

  • 相关阅读:
    成功连上数据库顿感世界美好许多
    MySQL数据库基本命令
    杭电1004 Let the Balloon Rise
    大数学习笔记
    安卓传感器开发之指南针
    java Class文件内部结构解析
    mysq数据库实战小型管理系统
    JSplitPane分隔线的用法
    swing 菜单+右键菜单+二级菜单实现
    input type=file 上传文件,同一个文件第二次上传无反应
  • 原文地址:https://www.cnblogs.com/zhiyuan-2011/p/4015958.html
Copyright © 2011-2022 走看看