call:
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])

定义:调用一个对象的一个方法,以另一个对象替换当前对象。

说明: call 方法可以用来代替另一个对象调用一个方法。

call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

  • 在js的函数上可以使用call方法来改变函数中的this指向
  • call里面的第一个参数会改变调用call方法的函数内的this
  • 不过第一个参数到达函数内部后会自动转成对象形式变成this
  • call里面的第二个参数及之后则对应调用call方法的函数的第一个参数及之后

thisObj的取值有以下4种情况:

(1) 不传,或者传null,undefined, 函数中的this指向window对象

(2) 传递另一个函数的函数名,函数中的this指向这个函数的引用

(3) 传递字符串、数值或布尔类型等基础类型,函数中的this指向其对应的包装对象,如 String、Number、Boolean

(4) 传递一个对象,函数中的this指向这个对象

function a(){   console.log(this);   //输出函数a中的this对象
}       function b(){}       var c={name:"call"};    //定义对象c  a.call();   //window
a.call(null);   //window
a.call(undefined);   //window
a.call(1);   //Number
a.call('');   //String
a.call(true);   //Boolean
a.call(b);   //function b(){}
a.call(c);   //Object
function class1(){   this.name=function(){   console.log("我是class1内的方法");   }
}
function class2(){ class1.call(this);  //此行代码执行后,当前的this指向了class1(也可以说class2继承了class1)
}   var f=new class2();
f.name();   //调用的是class1内的方法,将class1的name方法交给class2使用
function eat(x,y){   console.log(x+y);
}
function drink(x,y){   console.log(x-y);
}
eat.call(drink,3,2);//输出:5
//这个例子中的意思就是用 eat 来替换 drink,eat.call(drink,3,2) == eat(3,2) ,所以运行结果为:console.log(5);
//注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。
function Animal(){   this.name="animal";   this.showName=function(){   console.log(this.name);   }
}
function Dog(){   this.name="dog";
}
var animal=new Animal();
var dog=new Dog();       animal.showName.call(dog);//输出:dog
//在上面的代码中,我们可以看到Dog里并没有showName方法,那为什么(this.name)的值是dog呢?//关键就在于最后一段代码(animal.showName.call(dog)),意思是把animal的方法放到dog上执行,也可以说,把animal 的showName()方法放到 dog上来执行,所以this.name 应该是 dog。
//继承
function Animal(name){   this.name=name;   this.showName=function(){   console.log(this.name);   }
}
function Dog(name){   Animal.call(this,name);
}
var dog=new Dog("Crazy dog");
dog.showName();//输出:Crazy dog
//Animal.call(this) 的意思就是使用 Animal对象代替this对象,那么Dog就能直接调用Animal的所有属性和方法。

js中call()方法的用法相关推荐

  1. html dom createevent,js 中 document.createEvent的用法

    js 中 document.createEvent的用法 更新时间:2010年08月29日 23:22:02   作者: 用该方法创建了 Event 对象以后,必须用上表中所示的初始化方法初始化对象. ...

  2. js 中 document.createEvent的用法-转载

    js 中 document.createEvent的用法 <a class="comment-mod" οnclick="alert('ss')" hre ...

  3. PHP中魔术方法的用法

    PHP中魔术方法的用法 /** PHP把所有以__(两个下划线)开头的类方法当成魔术方法.所以你定义自己的类方法时,不要以 __为前缀. * */// __toString.__set.__get__ ...

  4. JS中toFixed()方法的问题及解决方案

    JS中toFixed()方法的问题及解决方案 参考文章: (1)JS中toFixed()方法的问题及解决方案 (2)https://www.cnblogs.com/gushen/archive/201 ...

  5. python中sorted_Python中sorted()方法的用法

    Python中sorted()方法的用法 2012-12-24 22:01:14| 分类: Python |字号 1.先说一下iterable,中文意思是迭代器. Python的帮助文档中对itera ...

  6. js中toFixed方法的两个坑

    js中toFixed方法的两个坑 toFixed返回结果是string,后续使用它计算会错误 toFixed返回结果可能出现负零-0.00 toFixed返回结果是string,后续使用它计算会错误 ...

  7. Js中fetch方法

    Js中fetch方法 fetch()方法定义在Window对象以及WorkerGlobalScope对象上,用于发起获取资源的请求,其返回一个Promise对象,这个Promise对象会在请求响应后被 ...

  8. created写法_vue.js中created方法作用

    这是它的一个生命周期钩子函数,就是一个vue实例被生成后调用这个函数.一个vue实例被生成后还要绑定到某个html元素上,之后还要进行编译,然后再插入到document中.每一个阶段都会有一个钩子函数 ...

  9. 【转载】JS中bind方法与函数柯里化

    原生bind方法 不同于jQuery中的bind方法只是简单的绑定事件函数,原生js中bind()方法略复杂,该方法上在ES5中被引入,大概就是IE9+等现代浏览器都支持了(有关ES5各项特性的支持情 ...

最新文章

  1. 深度学习在小分子药物研发中的应用
  2. [译] Swift 中的惰性序列及其原理
  3. AspectJ的注解开发AOP:异常抛出通知的学习
  4. Qt 二级菜单栏 中文无法输入问题
  5. poj2186 求有向图G中所有点都能到达的点的数量
  6. 用axis开发webservice实践
  7. php manager 怎么用,Windows 2008 R2下如何利用PHPManager对PHP进行配置
  8. linux时间字符串转正常时间
  9. Atitit。DD dragdrop拖拽功能c#.net java swing的对比与实现总结
  10. NeuCF源码中用到的模块(函数)
  11. Qt文档阅读笔记-QThreadPool的解释及使用
  12. Shell declare的使用方法
  13. 厦门大学数学专业考研试题参考解答
  14. 快速对表的某字段赋递增的数值
  15. java-日记本(一)
  16. Havok Vision Engine
  17. 春款童装产品做短视频营销应该怎么做?短视频营销策略分析
  18. 如何将夜晚图片转化为白天图片 matlab,Python|记一次图片夜景效果尝试
  19. 2021年大庆高考成绩查询,2021年大庆高考状元是谁分数多少分,历年大庆高考状元名单...
  20. 一键卸载,跟流氓软件说拜拜~

热门文章

  1. 基础知识--封装、继承、多态、抽象
  2. 均方根误差(RMSE)、平均绝对误差(MAE)、标准差
  3. 在ubuntu 上搭建Nginx-RTMP 直播服务器
  4. 字节数组与字节流、缓冲字节流、字符流、缓冲字符流、对象流
  5. 字符流何用, 字节流呢
  6. 24时区来源,CST,CET,UTC,DST,Unix时间戳概述、关系、转换
  7. 怎么把四个图片合成一个图片?
  8. C语言中,#include的用法:#include 和 #include区别
  9. git 删除远程仓库中的文件(夹)
  10. 使用 Javascript 创建和生成 UUID