javascript call与apply关键字的作用
apply接受两个参数。第一个参数指定函数体内this对象的指向,第二个参数为一个带下标的集合。
call则是apply的语法糖,如果参数数量固定,则可以不用带下标的集合传第二个参数。
1
2
3
4
5
6
|
var func = function (a,b,c) { alert(a + b + c); } func.apply( null ,[1,2,3]); //弹出6 func.call( null ,1,2,3); //弹出6 |
当apply与call传入的第一个参数为null时,函数体内的this会指向window。
call与apply的用途
1、改变this的指向
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
var obj1 = { name = '刘备' } var obj2 = { name = '曹操' } var getName = function (){ alert( this .name); } window.name = '三国' ; getName(); //弹出"三国" getName.call(obj1); //弹出"刘备" getName.call(obj2); //弹出"曹操" |
所以,当在一些情况下this被莫名改变指向之后,可以使用call或apply来进行修正this的指向。
1
2
3
4
5
6
7
|
document.getElementById( 'div1' ).onclick = function (){ alert( this .id); //div1 var fun1 = function (){ alert( this .id); //window.id 即undefined } fun1(); //普通函数的方式调用,this指代window,相当于window.id 即 undefined } |
由于是普通函数的方式调用,所以上面的例子中,this已经变成了window。下面看看如何使用call进行修正。
1
2
3
4
5
6
7
|
document.getElementById( 'div1' ).onclick = function (){ alert( this .id); var fun1 = function (){ alert( this .id); } fun1.call( this ); //强制函数内的this为外层的this, } |
2、调用其他对象的函数
示例1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
var obj1 = { a:1, b:2, add: function () { return this .a + this .b; } } var obj2 = { a:1, b:2, } var result = obj1.add.call(obj2); //用obj1的函数来计算obj2的两个属性的和 alert(result); //输出3 |
示例2:借用构造函数实现类似继承的效果
1
2
3
4
5
6
7
8
9
10
11
12
|
var A = function (name) { this .name = name; }; var B = function (){ A.apply( this ,arguments) } B.prototype.getName = function (){ return this .name; } var b = new B( '刘备' ); alert(b.getName()); |
javascript call与apply关键字的作用的更多相关文章
- JavaScript中的this关键字的用法和注意点
JavaScript中的this关键字的用法和注意点 一.this关键字的用法 this一般用于指向对象(绑定对象); 01.在普通函数调用中,其内部的this指向全局对象(window); func ...
- javascript篇-----函数apply()和call()
转自:http://www.jb51.net/article/28013.htm 如果没接触过动态语言,以编译型语言的思维方式去理解javaScript将会有种神奇而怪异的感觉,因为意识上往往不可能的 ...
- 转载 深入理解JavaScript中的this关键字
转载原地址: http://www.cnblogs.com/rainman/archive/2009/05/03/1448392.html 深入理解JavaScript中的this关键字 1. 一 ...
- 《JavaScript总结》apply、call和bind方法
在JavaScript中,apply.call.bind这个三个方法,它们的作用都是为了改变某个函数运行时的上下文, 也就是改变函数体内的this指向. 在一个函数里,存在“定义时上下文”.“运行时上 ...
- JavaScript中的apply()和call()
可以将call()和apply()看做是某个对象的方法,通过调用方法的形式来间接调用函数. call()和apply()的第一个实参是要调用函数的母对象,它是调用上下文,在函数体内通过this来获得对 ...
- 如何理解JavaScript中的this关键字
前言 王福朋老师的 JavaScript原型和闭包系列 文章看了不下三遍了,最为一个初学者,每次看的时候都会有一种 "大彻大悟" 的感觉,而看完之后却总是一脸懵逼.原型与闭包 可以 ...
- return 关键字的作用
注意: 如果一个函数的返回值类型是具体的数据类型,那么该函数就必须要保证在任意情况下都保证有返回值.(除了返回值类型是void以外) return 关键字的作用: 1. 返回数据给函数的调用者. 2. ...
- Linq中关键字的作用及用法
Linq中关键字的作用及用法 1.All:确定序列中的所有元素是否都满足条件.如果源序列中的每个元素都通过指定谓词中的测试,或者序列为空,则为 true:否则为 false. Demo: 此示例使用 ...
- Java对象表示方式1:序列化、反序列化和transient关键字的作用
平时我们在Java内存中的对象,是无法进行IO操作或者网络通信的,因为在进行IO操作或者网络通信的时候,人家根本不知道内存中的对象是个什么东西,因此必须将对象以某种方式表示出来,即存储对象中的状态.一 ...
随机推荐
- 第一个Struts2程序之HelloWorld
1.Struts2 简介 Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与St ...
- iOS 标识
通常情况下,iOS系统用NSUserDefaults存储数据信息,但是对于一些私密信息,比如密码.证书等等,就需要使用更为安全的keychain了. keychain里保存的信息不会因App被删除而丢 ...
- 存储过程中使用事务,sql server 事务,sql事务
一.存储过程中使用事务的简单语法 在存储过程中使用事务时非常重要的,使用数据可以保持数据的关联完整性,在Sql server存储过程中使用事务也很简单,用一个例子来说明它的语法格式: 代码 ...
- javascript标识符
标识符,就是指变量.函数.属性的名字,或者函数的参数. 规则 1.第一个字符必须是一个字母.下划线或是美元符号($) 2.其他字符可以是字母.下划线.美元符号或数字 3.不能是关键字和保留字 4.区分 ...
- TFS下的源代码控制
以下主要描述了: TFS源代码控制系统的基本场景 如何把一个项目添加到源代码管理中 如何与服务器同步 如何做Check-In 如何做分支与合并 什么是上架与下架 我们知道工作项是项目管理的基本元素,但 ...
- .NET微信开发通过Access Token和OpenID获取用户信息
本文介绍如何获得微信公众平台关注用户的基本信息,包括昵称.头像.性别.国家.省份.城市.语言. 本文的方法将囊括订阅号和服务号以及自定义菜单各种场景,无论是否有高级接口权限,都有办法来获得用户基本信息 ...
- Python的第六天
常用模块的学习 一.time & datetime模块 时间相关的操作,时间有三种表示方式: 时间戳 1970年1月1日之后的秒,即:time.time() 格式化 ...
- nginx响应时间监控脚本
最近我们服务的使用方总是反应说我们接口超时,于是做了一个监控脚本,统计最近五分钟的响应情况,并对异常情况发送邮件报警. #!/bin/bash function define(){ ori_log_p ...
- 安装LockBox 3.7.0,用LockBox加密解密!
LockBox 官 方 网 站:http://lockbox.seanbdurkin.id.au/HomePage LockBox的Github 网址:https://github.com/S ...
- Spring AOP 由浅入深
(分析基于Spring的版本:version = 4.1.6.RELEASE) Spring AOP工厂: org.springframework.aop.framework.DefaultAopPr ...