js方法apply&call小结

当你想使用某个方法,而你自己却没有但是别人有的时候,那你就用他的方法呗,你调他的方法,但是要传入你和你的参数,apply&call大概就是为了这个目的产生的~

call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。

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

 

例如,有一个函数 func1 定义如下:

      var func1 = function(arg1, arg2) {};

      可以通过 func1.call(this, arg1, arg2); 或者 func1.apply(this, [arg1, arg2]); 来调用。其中 this 是你想指定的上下文,他可以任何一个 JavaScript 对象(JavaScript 中一切皆对象),call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里。

JavaScript 中,某个函数的参数数量是不固定的,因此要说适用条件的话,当你的参数是明确知道数量时,用 call,而不确定的时候,用 apply,然后把参数 push 进数组传递进去。当参数数量不确定时,函数内部也可以通过 arguments 这个数组来便利所有的参数。

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 中的值带入到方法里。

复制代码
// 父类
     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("WW","18","一年级");

     console.log("您好,",s1.name,"您今年",s1.age,"岁,就读于",s1.grade,",实在太棒了");
复制代码

 

posted @   掉进书洞里的猫  阅读(139)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
历史上的今天:
2015-01-07 C#秘密武器之特性
点击右上角即可分享
微信分享提示