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 相关文章推荐
JS获取浏览器版本及名称实现函数
Apr 02 Javascript
js正则表达式的使用详解
Jul 09 Javascript
jQuery中使用Ajax获取JSON格式数据示例代码
Nov 26 Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
Sep 05 Javascript
jquery验证邮箱格式并显示提交按钮
Nov 07 Javascript
基于jquery实现左右按钮点击的图片切换效果
Jan 27 Javascript
JavaScript实现自动切换图片代码
Oct 11 Javascript
利用js定义一个导航条菜单
Mar 14 Javascript
Vue制作Todo List网页
Apr 26 Javascript
vue watch监听对象及对应值的变化详解
Feb 24 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
May 19 jQuery
用Javascript实现发送短信验证码间隔功能
Feb 08 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中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
PHP中set_include_path()函数相关用法分析
2016/07/18 PHP
IE与Firefox下javascript getyear年份的兼容性写法
2007/12/20 Javascript
javascript中打印当前的时间实现思路及代码
2013/12/18 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
详解Javascript继承的实现
2016/03/25 Javascript
20分钟成功编写bootstrap响应式页面 就这么简单
2016/05/12 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
2016/05/28 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
2017/05/24 Javascript
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
2018/10/09 Javascript
Vue 实时监听窗口变化 windowresize的两种方法
2018/11/06 Javascript
Node.js assert断言原理与用法分析
2019/01/04 Javascript
vue如何实现动态加载脚本
2020/02/05 Javascript
JQuery Ajax如何实现注册检测用户名
2020/09/25 jQuery
[00:43]拉比克至宝魔导师密钥展示
2018/12/20 DOTA
python类型强制转换long to int的代码
2013/02/10 Python
解决python使用open打开文件中文乱码的问题
2017/12/29 Python
解决python xlrd无法读取excel文件的问题
2018/12/25 Python
详解Python sys.argv使用方法
2019/05/10 Python
OpenCV搞定腾讯滑块验证码的实现代码
2019/05/18 Python
详解python内置模块urllib
2020/09/09 Python
html5开发之viewport使用
2013/10/17 HTML / CSS
斯凯奇新西兰官网:SKECHERS新西兰
2018/02/22 全球购物
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
食品安全工作方案
2014/05/07 职场文书
留学推荐信范文
2014/05/10 职场文书
销售团队口号大全
2014/06/06 职场文书
论群众路线学习笔记
2014/11/06 职场文书
小学教师党员承诺书
2015/04/27 职场文书
2015年学校总务处工作总结
2015/05/19 职场文书
Golang Gob编码(gob包的使用详解)
2021/05/07 Golang
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL
win11无法登录onedrive错误代码0x8004def7怎么办 ?
2022/04/05 数码科技