在一些jQuery插件中经常看到类似 callback.call(xxx,xxx) 虽然看到书上有介绍 说call和apply函数可以改变作用域,但还是无法非常透彻的理解改变作用域主要是为了解决什么问题,有没有替代方案,或者 这2个函数主要为了解决什么问题,应用场景,何时使用最合适,每次读到这样的代码就晕了,一下子从线性阅读中跳出去了,感觉有点绕 call和apply的作用很简单,就是改变上下文,适用场景太多了,虽然有时候只是为了“美观”,下面几个是我常用的。 1. 代码如下:Object.prototype.toString.call(Obj) 用来判断 Obj 的类型 arguments JavaScript中的`call`和`apply`是两种非常重要的函数调用方式,它们的主要作用是改变函数执行时的上下文(即`this`的指向),从而解决特定的问题并提供灵活的编程模式。理解这两个方法对于深入JavaScript编程至关重要。 我们要明白`this`在JavaScript中的特殊性。`this`在函数中通常表示调用该函数的对象,但在不同环境下,它的值会有所不同。`call`和`apply`正是为了给`this`赋值提供一种控制手段。 1. **判断对象类型**: `Object.prototype.toString.call(Obj)` 是一个常见的使用`call`的例子。由于`toString()`方法内部会返回对象的类型,通过这种方式可以准确地判断一个对象是否属于特定类型,例如,区分数组、日期等。 2. **借用方法**: 当你需要在非数组对象上调用数组特有的方法(如`push`, `shift`, `forEach`等)时,可以使用`call`或`apply`。例如,`Array.prototype.push.call(arguments, value)`可以在`arguments`对象上执行`push`方法,因为`arguments`虽然类似数组,但并不是真正的数组。 3. **模拟私有方法**: JavaScript中没有内置的私有方法机制,但可以通过闭包和`call`/`apply`来实现。在上述示例中,`_privateFunction`被定义为私有函数,然后通过`call`在构造函数内部调用,确保`this`指向正确的新创建的实例。 4. **控制回调函数的上下文**: 当我们需要确保回调函数在特定的上下文中执行时,`call`和`apply`非常有用。例如,在类的成员函数中,如果传递了一个回调函数作为参数,那么我们可能希望在回调函数中直接使用`this`来访问当前对象的其他方法。如下所示: ```javascript var Person = function() {}; Person.prototype.say = function(callback) { callback.call(this); }; Person.prototype.other = function() {}; var vincent = new Person(); vincent.say(function() { this.other(); // 此处的this指向vincent实例 }); ``` 如果不使用`call`或`apply`,回调函数内部的`this`将取决于它如何被调用,这可能导致意外的结果。 5. **数组参数变通**: `apply`的一个独特之处在于它可以接收一个数组或类数组对象作为参数,使得你可以一次性传递多个参数。例如,`fn.apply(null, [arg1, arg2])`相当于`fn(arg1, arg2)`。 `call`和`apply`在处理异构数据、方法借用、上下文控制以及灵活的参数传递等方面提供了强大的工具。虽然它们可以用来改变`this`,但并不总是必要的,有时候可以通过闭包、箭头函数或者其他设计模式来避免使用它们。然而,理解并掌握这两个方法对于提升JavaScript编程能力是非常有益的。






















- 粉丝: 4
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 单片机校园时间控制系统开题研究报告.doc
- 试论网络思想政治教育评价的特性.docx
- 计算机图形学与图形图像处理技术研究.docx
- 信息化时代医院文书档案管理工作的方法及策略.docx
- 基于单片机的花样电子时钟设计与制作.doc
- 单片机课题评测研究报告.doc
- (源码)基于Spring和物联网的智能饮品监测管理系统.zip
- 电力工程中输电线路施工项目管理存在的问题及对策分析.docx
- 一下找规律MicrosoftPowerPoint演示文稿.ppt
- 面向对象程序设计课程设计专业技术方案.doc
- 2025WAIC世界人工智能大会综合专业报告
- 基于五个对接的机械制造与自动化专业人才培养模式.docx
- 计算机在民政局社会福利中心科技管理中的应用与创新.docx
- 唐山首钢马兰庄铁矿有限责任公司dmine矿业软件在地质工作中应用.doc
- 肠结核结核性腹膜炎网络版.ppt
- (源码)基于C#的火车票预订系统.zip


