JavaScript四种调用模式和this示例介绍


Posted in Javascript onJanuary 02, 2014

JavaScript调用时除了声明时定义的形参外,每个函数接受两个附加参数:this 和arguments,this在面向对象编程中非常重要,它取决于调用模式。

JavaScript有四种调用模式,方法调用模式,函数调用模式,构造器调用模式和apply调用模式。这些模式在初始化关键参数this上存在差异。

方法调用模式:当一个函数被保存为对象的一个属性时,我们称它为一个方法,当一个方法被调用时,this被绑定到该对象上。如果调用表达式包含一个属性取表达式(即一个.点表达式或[script]下标表达式),那么它被当做一个方法调用。

var myObject = { 
value: 0; 
increment: function(inc){ 
this.value += typeof inc === 'number' ? inc : 1; 
} 
}; myObject.increment(); 
document.writeln(myObject.value);//1 
myObject.increment(2); 
document.writeln(myObject.value);//2

方法可以使用this去访问对象,所以它能从对象中取值或修改对象。this的绑定发生在调用的时候。这个超级迟绑定使得函数可以对this高度复用。通过this可以取得他们所属的上下文方法称为公共方法。

函数调用模式:当一个函数并非一个对象的属性时,那么它被当做一个函数来调用 var sum = add(3, 4);//sum值为7
当函数以此模式调用时,this被绑定到全局对象。

构造器调用模式:JavaScript是一门基于原型继承的语言。这意味着可以直接从其他对象继承属性。该语言是无类别的。
如果在函数前面带上new来调用,那么将创建一个隐藏连接到该函数的prototype成员的新对象,同时this将会被绑定到那个新对象上。

Apply调用模式:因为JavaScript是一门函数式的面向对象编程语言,所以函数可以拥有方法。
apply方法让哦我们构建一个参数数组并用其去调用函数。它也允许我们选择this的值。
apply方法接受两个参数,第一个将被绑定给this的值,第二个就是一个参数数组。

Javascript 相关文章推荐
用javascript实现计算两个日期的间隔天数
Aug 14 Javascript
JavaScript 异步调用框架 (Part 4 - 链式调用)
Aug 04 Javascript
JavaScript设置首页和收藏页面的小例子
Nov 11 Javascript
jquery prop的使用介绍及与attr的区别
Dec 19 Javascript
js实现漂浮回顶部按钮实例
May 06 Javascript
深入浅析JavaScript的API设计原则
Jun 14 Javascript
JavaScript简单实现弹出拖拽窗口(一)
Jun 17 Javascript
Bootstrap CSS布局之代码
Dec 17 Javascript
javascript设计模式之策略模式学习笔记
Feb 15 Javascript
Vue+Koa2 打包后进行线上部署的教程详解
Jul 31 Javascript
JavaScript适配器模式原理与用法实例详解
Mar 09 Javascript
JS实现多功能计算器
Oct 28 Javascript
ParseInt函数参数设置介绍
Jan 02 #Javascript
JS中Date日期函数中的参数使用介绍
Jan 02 #Javascript
JavaScript中Math对象方法使用概述
Jan 02 #Javascript
javascript数组快速打乱重排的方法
Jan 02 #Javascript
利用进制转换压缩数字函数分享
Jan 02 #Javascript
利用window.name实现windowStorage代码分享
Jan 02 #Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
Jan 02 #Javascript
You might like
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
phpfans留言版用到的数据操作类和分页类
2007/01/04 PHP
攻克CakePHP系列二 表单数据显示
2008/10/22 PHP
探讨php中遍历二维数组的几种方法详解
2013/06/08 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
PHP命名空间(namespace)的使用基础及示例
2014/08/18 PHP
php采用ajax数据提交post与post常见方法总结
2014/11/10 PHP
php类的自动加载操作实例详解
2016/09/28 PHP
JavaScript sup方法入门实例(把字符串显示为上标)
2014/10/20 Javascript
jquery插件star-rating.js实现星级评分特效
2015/04/15 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
2016/08/09 Javascript
JS触摸事件、手势事件详解
2017/05/04 Javascript
React+react-dropzone+node.js实现图片上传的示例代码
2017/08/23 Javascript
for循环 + setTimeout 结合一些示例(前端面试题)
2017/08/30 Javascript
javascript计算渐变颜色的实例
2017/09/22 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
vue-路由精讲 二级路由和三级路由的作用
2020/08/06 Javascript
[01:01:29]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第一场
2018/04/05 DOTA
详解Python命令行解析工具Argparse
2016/04/20 Python
Python编程中归并排序算法的实现步骤详解
2016/05/04 Python
利用标准库fractions模块让Python支持分数类型的方法详解
2017/08/11 Python
python并发编程之线程实例解析
2017/12/27 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
完美实现CSS垂直居中的11种方法
2021/03/27 HTML / CSS
房产公证书范本
2014/04/10 职场文书
《东方明珠》教学反思
2014/04/20 职场文书
项目申请汇报材料
2014/08/16 职场文书
解除劳动合同协议书范本2014
2014/09/25 职场文书
大学生求职信怎么写
2015/03/19 职场文书
会计主管岗位职责
2015/04/02 职场文书
大学生违纪检讨书范文
2015/05/07 职场文书
第二次离婚起诉书
2015/05/18 职场文书
立案决定书范文
2015/06/24 职场文书
2016入党心得体会范文
2016/01/06 职场文书
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技