javascript中call apply 的应用场景


Posted in Javascript onApril 16, 2015

在一些jQuery插件中经常看到类似 callback.call(xxx,xxx) 虽然看到书上有介绍 说call和apply函数可以改变作用域,但还是无法非常透彻的理解改变作用域主要是为了解决什么问题,有没有替代方案,或者 这2个函数主要为了解决什么问题,应用场景,何时使用最合适,每次读到这样的代码就晕了,一下子从线性阅读中跳出去了,感觉有点绕

call和apply的作用很简单,就是改变上下文,适用场景太多了,虽然有时候只是为了“美观”,下面几个是我常用的。

1.

Object.prototype.toString.call(Obj)

用来判断 Obj 的类型

arguments 虽然和Array 很像,但是他没有Array的push之类的方法,怎么办?
Array.prototype.push.call(arguments)

3.Javascript 没有私有方法的概念,想用闭包实现

(function () {
  var Person = function () {
    this.doSomeThing = function () {
      _privateFunction.call(this);
    }
  }

  var _privateFunction = function () {

  }

  window.Person = Person;

}).call(window);

差不多就是这个意思,callback的时候,当你希望你的callback中的上下文是当前上下文的时候,也可以用call或者apply,有什么好处呢?

这个时候你的callback 里面的this 就是指代当前上下文。例如一个类Person,然后他的方法 say 有一个callback的参数,如果这个callback是通过普通的括号来执行的话,那在这个callback里面执行person的其它方法还需要用person.other 来实现,但是切换上下文之后,就是this.other搞定~代码对比如下:

var Person = function(){

};

Person.prototype.say = function(callback){
  callback();
};

Person.prototype.other = function(){

};

var vincent = new Person();

vincent.say(function(){
  vincent.other();
});

用了call的:

var Person = function(){

};

Person.prototype.say = function(callback){
  callback.call(this);
};

Person.prototype.other = function(){

};

var vincent = new Person();

vincent.say(function(){
  this.other();
});

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
extjs 学习笔记(一) 一些基础知识
Oct 13 Javascript
jquery图形密码实现方法
Mar 11 Javascript
javascript实现动态表头及表列的展现方法
Jul 14 Javascript
深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
Dec 01 Javascript
JS实现添加,替换,删除节点元素的方法
Jun 30 Javascript
JQ选择器_选择同类元素的第N个子元素的实现方法
Sep 08 Javascript
js仿手机页面文件下拉刷新效果
Oct 14 Javascript
Javascrip实现文字跳动特效
Nov 27 Javascript
详解js根据百度地图提供经纬度计算两点距离
May 13 Javascript
微信小程序实现图片翻转效果的实例代码
Sep 20 Javascript
js 获取扫码枪输入数据的方法
Jun 10 Javascript
js实现带积分弹球小游戏
Jul 21 Javascript
javascript三元运算符用法实例
Apr 16 #Javascript
jQuery on()方法使用技巧详解
Apr 16 #Javascript
JavaScript简单表格编辑功能实现方法
Apr 16 #Javascript
JavaScript转换二进制编码为ASCII码的方法
Apr 16 #Javascript
JavaScript实现彩虹文字效果的方法
Apr 16 #Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
Apr 16 #Javascript
JQuery跳出each循环的方法
Apr 16 #Javascript
You might like
PHP常用代码大全(新手入门必备)
2010/06/29 PHP
Windows中使用计划任务自动执行PHP程序实例
2014/05/09 PHP
Yii Framework框架获取分类下面的所有子类方法
2014/06/20 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
javascript实现获取字符串hash值
2015/05/10 Javascript
Jquery中基本选择器用法实例详解
2015/05/18 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
2016/02/17 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
JavaScript定时器实现的原理分析
2016/12/06 Javascript
JavaScript制作简易计算器(不用eval)
2017/02/05 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
react中的ajax封装实例详解
2017/10/17 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
js屏蔽退格键(backspace或者叫后退键与F5)
2019/02/10 Javascript
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
微信小程序前端自定义分享的实现方法
2019/06/13 Javascript
Vue中对iframe实现keep alive无刷新的方法
2019/07/23 Javascript
layui的面包屑或者表单不显示的解决方法
2019/09/05 Javascript
Vue的属性、方法、生命周期实例代码详解
2019/09/17 Javascript
微信小程序实现录制、试听、上传音频功能(带波形图)
2020/02/27 Javascript
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
谈谈JavaScript中的函数
2020/09/08 Javascript
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
[01:36]DOTA2完美大师赛趣味视频之与队友相处的十万个技巧
2017/11/19 DOTA
[42:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS OpTic
2018/03/31 DOTA
Python中operator模块的操作符使用示例总结
2016/06/28 Python
Python实现将json文件中向量写入Excel的方法
2018/03/26 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
2019/09/25 Python
Python selenium模拟手动操作实现无人值守刷积分功能
2020/05/13 Python
python实现ping命令小程序
2020/12/28 Python
杭州时比特电子有限公司SQL
2013/08/22 面试题
中学教师管理制度
2014/01/14 职场文书
冬季安全检查方案
2014/05/23 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书