call和apply的用途是完全一样的。改变函数中this的指向:

为什么要改变this的指向呢?这个有什么用?有哪些场景呢?

首先this的指向总是在变的,this的指向是由函数执行时所在的环境决定的,而不是函数声明时的环境。

this都指向哪里?

1、在控制台中输入下面的代码,此时可以看到this指向a这个对象。

var a={name:'a',getName:function(){return this.name;}
}
console.info(a.getName());//a

2、此时this指向了window

window.name= 'window';
var a={name:'a',getName:function(){return this.name;}
}var b = a.getName;
console.info(b());//window

结论:

如果函数是作为一个对象的属性被调用的(用点的方式调用),此时函数内的this就指向这个对象。

如果是用变量或者名称的方式直接调用的(不是使用点调用),则指向window。

场景:

this的改变:在写代码时经常会遇到这种情况,将函数作为回调函数使用时,this的指向变为了window,这个不是我们预期的结果

window.name='window';
var a={name:'a',getName:function(callback){return callback();//funcB使用非对象.的方式调用},funcB:function(){return this.name;}
}
console.info(a.getName(a.funcB));//window

这个时候就可以用call或者apply把this传递到callback中,callback中的this的指向就会被传入的this所替代。

当然,也可以传入其他对象覆盖当前this的指向。

window.name='window';
var b={name:'b'
};
var a={name:'a',getName:function(callback){return callback.call(b);//传入b
    },funcB:function(){return this.name;}
}
console.info(a.getName(a.funcB));//b

也可以借用这个对象的方法。

window.name='window';
var b={name:'b',    getBName:function(){return this.name;}
};
var a={name:'a',getName:function(callback){return callback.call(b);//传入b
    },funcB:function(){return this.getBName();}
}
console.info(a.getName(a.funcB));//b

使用这个功能可以实现类似继承的效果

var  F=function(name){this.name = name;
}
var S = function(){this.age=arguments[1];F.apply(this,arguments);
}
S.prototype.getNameAndAge=function(){console.info('名字是'+this.name+'年龄是'+this.age);
}var s = new S('小红','9岁');
s.getNameAndAge();//名字是小红年龄是9岁

call和apply的区别:

传入的参数形式不一样

call(obj,参数1,参数2);

apply(obj,[参数1,参数2]);

转载于:https://www.cnblogs.com/panyujun/p/9367911.html

js中call和apply的作用和用法相关推荐

  1. js中的匿名函数的作用以及用法讲解

    匿名函数顾名思义指的是没有名字的函数,在实际开发中使用的频率非常高!也是学好JS的重点. 释义:匿名函数,就是没有实际名字的函数. 小试牛刀,首先我们声明一个普通函数: //声明一个普通函数,函数的名 ...

  2. JS 中 call()、apply()、bind() 的用法

    其实是一个很简单的东西,认真看十分钟就从一脸懵B 到完全 理解! 先看明白下面: 例 1 obj.objAge; // 17obj.myFun() // 小张年龄 undefined 例 2 show ...

  3. js中的波浪线符号作用(按位非(~)符号)

    js中的波浪线符号作用(按位非(~)符号) 一.输入为正数(1和2) 二.输入为负数(-1,-2) Javascript 按位取反运算符 (~) ,对一个表达式执行位非(求非)运算.如 ~1 = -2 ...

  4. return true Java_[Java教程]js中return,return true,return false的用法及区别

    [Java教程]js中return,return true,return false的用法及区别 0 2015-11-16 23:00:03 1.语法及返回方式 ①返回控制与函数结果 语法为:retu ...

  5. javascript中call和apply的区别和用法

    javascript中call和apply的区别和用法 1.call和apply是什么 更改对象的内部指针指向,即改变对象的this指向的内容 function Fn(){this.name='小明' ...

  6. chrome中Blackbox Script 黑盒脚本作用及用法

    chrome中Blackbox Script 黑盒脚本作用及用法 Blackbox Script功能 每天前端人员在调试代码的时候,都可能会遇到代码调试着会进入第三方库文件,带来很多没必要的调试,不方 ...

  7. js中几个对象的区别和用法

    js中几个对象的区别和用法 今天总结一下js中几个对象的区别和用法: 首先来说说 parent.window与top.window的用法 "window.location.href" ...

  8. javascript 中 caller 与 callee 的作用以及用法

    这两个关键字在平时编码中几乎难以用到,但它们既然存在于javascript语言体系中,那么还是有必要了解下. caller 是 javascript 函数类型的一个属性,它引用调用当前函数的函数 fu ...

  9. js中parentNode和parentElement的区别和用法

    了解本篇的基础必须知道什么是节点,关于html dom节点知识点和节点类型的知识,分别看<js节点都有哪些类型?怎么判断是哪种节点类型?>和<js属性节点获取和移除>,下面直接 ...

最新文章

  1. Data - 数据思维 - 下篇
  2. 腾讯大佬教我的工作方法(非常有效!)
  3. 安全实现Linux网络监控(1)
  4. 最新版Kubernetes常用命令大全
  5. oschina导出博客获取图片
  6. 最优资产组合步骤_重新设计投资组合网站之前,请按照以下5个步骤进行操作
  7. javascript 学习笔记三 之 变量
  8. C++:fseek( FILE *stream, long offset, int origin )
  9. 零基础入门Python数据分析,只需要看懂这一张图,附下载链接!
  10. mysql 优化器提示_Mysql查询优化器
  11. java 生成jar包并保留注释
  12. 九度 1532:棋盘寻宝扩展(背包方案统计)
  13. apiDoc之api接口文档生成
  14. eMMC mmcblk0boot0
  15. 安杰文高等计算机与生产技术学校,留学预警:2012年教育部承认的法国大学名单...
  16. Pigeon中的Netty应用
  17. RobotStudio 自动路径
  18. 最权威的成都Java培训机构排名榜单公布啦,学Java必看
  19. java redis 通知_Jboot实现Redis操作事件通知
  20. 基于单片机水温自动控制系统设计-毕设课设资料

热门文章

  1. python实现局域网攻击_通过python实现DNS欺骗
  2. html怎么上传qq空间,qq空间怎么上传照片
  3. python字符串解释_python基础之字符串详解
  4. python怎么改字体_python,tkinter_Tkinter Label 如何改变Label中的文字样式,例如给文字加删除线,python,tkinter - phpStudy...
  5. yolov4论文_Alexey 大神接棒,YOLOv4 重磅来袭!快来一睹论文真容吧!| 原力计划...
  6. 判别分析分为r型和q型吗_SPSS聚类和判别分析参考.ppt
  7. php根本自学不了,PHP开发自学还是培训?
  8. 光端机常见故障问题及其解决方案
  9. 飞畅科技-工业交换机电源故障初探
  10. 工业级交换机的功率和管理功能详解