1:每个函数都包含两个非继承而来的方法:call(),apply().

2:call方法和apply方法作用是一样的。

下边是call的使用例子:

 1 window.color = 'red';
 2 document.color = 'yellow';
 3 var s1 = {color: 'blue'};
 4
 5 function getColor (){
 6     console.log(this.color);
 7 }
 8 getColor.call(); //red (默认传递参数)
 9 getColor.call(window);// red
10 getColor.call(document);//yellow
11 getColor.call(s1);//blue
12 getColor.call(this);//red

 1 var Pet={
 2   words : '...',
 3   speak : function(say){console.log(say+ ' ' + this.words);}
 4 }
 5
 6 Pet.speak('howling'); //howling...
 7
 8
 9
10 var Dog = {words: 'wang wang'}
11
12 Pet.speak.call(Dog, 'barking');// barking wang wang

下边是apply使用例子

 1 window.number = 'one';
 2 document.number = 'two';
 3 var s2 = {number: 'three'};
 4
 5 function getNum(){ console.log(this.number); }
 6
 7 getNum.apply(); // one 默认
 8 getNum.apply(window); //one
 9 getNum.apply(document);//two
10 getNum.apply(s2);//three
11 getNum.apply(this);//one

 1 function Pet(words){
 2   this.words = words;
 3   this.speak = function(){ console.log(this.words) }
 4 }
 5
 6 function Dog(words){
 7    // Pet.call(this, words);
 8    Pet.apply(this, arguments);
 9 }
10
11 var dog = new Dog('wang wang');
12 dog.speak();// wang wang

3:不同点是接收参数的方式不同。

function add(c,d){ return this.a + this.b + c + d;}var s = {a:1, b:2};
console.log( add.call(s,3,4) );// 1+2+3+4 =10
console.log( add.apply(s,[3,4]) ); // 1+2+3+4 =10

 1 window.firstName = "tomF";
 2 window.lastName = "tomL";
 3 var myObj = {firstName:"myF", lastName:"myL"};
 4
 5 function getName(){ console.log(this.firstName + this.lastName); }
 6
 7 function getMess(sex, age){
 8     console.log(this.firstName + this.lastName+ "性别:"+sex+"age:"+age);
 9 }
10
11 getName.call(window);//tomFtomL
12 getName.call(myObj);//myFmyL
13 getName.apply(window);//tomFtomL
14 getName.apple(myObj);//myFmyL
15
16 getMess.call(window,'girl',21);//tomFtomL性别:girlage:21
17 getMess.apply(window,['girl',21]);//tomFtomL性别:girlage:21
18 getMess.call(myObj,'unknown',30);//myFmyL性别:unknownage:30
19 getMess.apply(myObj,['unknown',30]);//myFmyL性别:unknownage:30

转载于:https://www.cnblogs.com/ming-os9/p/8945901.html

call 和 apply 方法相关推荐

  1. JS中的call()方法和apply()方法用法总结

    1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法. 2. 相同点:这两个方法的作用是一样的. 都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖 ...

  2. Angular的ChangeDetectorRef.detectChanges()实现angularJS的$apply()方法,强制刷新数据渲染

    在Javascript代码里,都是按照一定顺序来执行的,当轮到一个代码片段执行的时候,浏览器就只会去执行当前的片段,不会做任何其他的事情.所以有时候一些做得不是很好的网页,当点击了某个东西之后会卡住, ...

  3. Angularjs $scope 里面的$apply 方法 和 $watch 方法

    Angularjs $scope 里面的$apply 方法 和 $watch 方法 学习要点: 1. Angularjs $scope 里面的$apply 方法 2. Angularjs $scope ...

  4. Pandas中map,applymap和apply方法之间的区别

    本文翻译自:Difference between map, applymap and apply methods in Pandas Can you tell me when to use these ...

  5. 【Android Gradle 插件】Module 目录下 build.gradle 配置文件 ( plugins 闭包代码块中引入插件 | PluginAware#apply 方法引入插件 )

    文章目录 一.Module 目录下 build.gradle 配置文件 1.plugins 闭包代码块中引入插件 2.PluginAware#apply 方法引入插件 Android Plugin D ...

  6. 《ES6基础教程》之 Call 方法和 Apply 方法

    1 <script type="text/javascript"> 2 // Call方法: 3 // 语法:call(thisObj[,arg1,arg2,...,a ...

  7. Scala类的定义,主/辅构造器,以及方法中的变量定义,单例对象,伴生对象,Apply方法调用,应用程序对象

    1. 类 1.1. 类的定义 package cn.toto.scala.day2/*** 在Scala中,类并不用声明为public类型的.* Scala源文件中可以包含多个类,所有这些类都具有共有 ...

  8. windows 改变文件大小 函数_手写 bind call apply 方法 与 实现节流防抖函数

    实现 bind call apply 方法 this 是什么? this是指包含它的函数作为方法被调用时所属的对象.这句话理解起来感觉还是很拗口的,但是如果你把它拆分开来变成这三句话后就好理解一点了. ...

  9. js里apply方法的简单实例

    代码片断 $(document).ready(function(){function apple(age,name,color) {this.name = name;this.color = colo ...

  10. 面试官问:能否模拟实现JS的call和apply方法

    写于2018年11月30日,发布在掘金上阅读量近一万,现在发布到微信公众号申明原创.相对比较基础的知识,虽然日常开发可能用得比较少,各种源码中有很多call和apply,需要掌握. 前言 这是面试官问 ...

最新文章

  1. onethink不能安装到已经存在的数据库中的问题
  2. 西电计算机本科学费,陕西高校学费大比拼!你当年的学费现在涨了多少
  3. Python_基础_5
  4. redis 原码安装
  5. java类的结构:构造器 —(13)
  6. 安装vue-cli时报错
  7. 一个程序详细研究DataReader(转)
  8. 函数指针与回调函数详解
  9. 基于感知机Perceptron的鸢尾花分类实践
  10. QTCreator2.8.0+Qt Open source 4.8.5环境配置(Win7x64)
  11. SQL 查找是否存在,别再 count 了,很耗费时间的!
  12. MySQL主从复制的原理及配置方法(比较详细)
  13. Selenium-WebDriver基本使用和API--1
  14. 【自用】Android 切割Bitmap为多个小的Bitmap
  15. 中柏平板触摸驱动_要成绩也要玩乐,聊聊学生买平板那些事儿
  16. 204. Count Primes 1
  17. django初体验 学习笔记
  18. app渗透实战案例—Spring Boot Actuator未授权到脱库
  19. 直流无刷电机与永磁同步电机区别
  20. cesium加载entity图片缩放_Vue中使用vuecroper插件实现图片上传裁剪并传到SpringBoot后台接口...

热门文章

  1. 15Echarts:复杂数据展示
  2. 2021年幼儿园教师招聘:中班绘画活动《吹画梅花》
  3. proxy代理报错: Uncaught (in promise) Error: Request failed with status code 500
  4. iOS 解决scoryboard上tableview、collection view顶部有空白问题
  5. Idea的快捷功能使用统计
  6. 入侵必读:网警如何找到你
  7. vscode调试C/C++报错:the program has exited with code 42 (0x0000002a).
  8. echarts中如何配置图例形状、图标宽高、图标和文字间距、图例位置、文字颜色、字体大小
  9. 使用网卡rtk8812au以及omnipeek抓取空中包
  10. kingcms php 标签,MySQL_KingCMS广告标签的使用方法,KINGCMS在3.0的时候我用过,可以 - phpStudy...