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 相关文章推荐
求得div 下 img的src地址的js代码
Feb 28 Javascript
js限制文本框只能输入数字(正则表达式)
Jul 15 Javascript
禁用页面部分JavaScript不是全部而是部分
Sep 03 Javascript
jQuery插件scroll实现无缝滚动效果
Apr 27 Javascript
javasript实现密码的隐藏与显示
May 08 Javascript
谈一谈bootstrap响应式布局
May 23 Javascript
PHP获取当前页面完整URL的方法
Dec 02 Javascript
微信小程序icon组件使用详解
Jan 31 Javascript
JavaScript创建对象的四种常用模式实例分析
Jan 11 Javascript
使用异步组件优化Vue应用程序的性能
Apr 28 Javascript
JavaScript判断浏览器版本的方法
Nov 03 Javascript
Vue中登录验证成功后保存token,并每次请求携带并验证token操作
Sep 08 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
php在线代理转向代码
2012/05/05 PHP
jQuery异步获取json数据方法汇总
2014/12/22 Javascript
JavaScript设计模式之建造者模式介绍
2014/12/28 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
基于canvas实现的绚丽圆圈效果完整实例
2016/01/26 Javascript
js判断是否为空和typeof的用法(详解)
2016/10/07 Javascript
浅谈js键盘事件全面控制
2016/12/01 Javascript
flexslider.js实现移动端轮播
2017/02/05 Javascript
JS实现新建文件夹功能
2017/06/17 Javascript
JavaScript html5 canvas实现图片上画超链接
2017/10/20 Javascript
详解mpvue开发微信小程序基础知识
2019/09/23 Javascript
如何优雅地取消 JavaScript 异步任务
2020/03/22 Javascript
[01:36]DOTA2完美大师赛趣味视频之与队友相处的十万个技巧
2017/11/19 DOTA
[54:41]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VGJ.T VS paiN
2018/03/31 DOTA
Python面向对象编程中的类和对象学习教程
2015/03/30 Python
Python实现新浪博客备份的方法
2016/04/27 Python
python2.7的编码问题与解决方法
2016/10/04 Python
简单谈谈Python中的闭包
2016/11/30 Python
Django rstful登陆认证并检查session是否过期代码实例
2019/08/13 Python
Python运行DLL文件的方法
2020/01/17 Python
django模板获取list中指定索引的值方式
2020/05/14 Python
Manjaro、pip、conda更换国内源的方法
2020/11/17 Python
使用CSS3来匹配横屏竖屏的简单方法
2015/08/04 HTML / CSS
html5自带表单验证体验优化及提示气泡修改功能
2017/09/12 HTML / CSS
html5 datalist标签使用示例(自动完成组件)
2014/05/04 HTML / CSS
美国汽车交易网站:Edmunds
2016/08/17 全球购物
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
linux下进程间通信的方式
2013/01/23 面试题
Linux面试题LINUX系统类
2014/11/19 面试题
岳父生日宴会答谢词
2014/01/13 职场文书
先进德育工作者事迹材料
2014/01/24 职场文书
初二物理教学反思
2014/01/29 职场文书
怎样填写就业意向
2014/04/02 职场文书
蓝颜请假条
2014/04/11 职场文书
教师反邪教心得体会
2016/01/15 职场文书