JavaScript中的方法调用详细介绍


Posted in Javascript onDecember 30, 2014

JavaScript中,如果function属于一个对象,那么通过对象来访问该function的行为称之为“方法调用”。与普通的函数调用不同的是,在进行方法调用时,function中的this指代将发生变化 — this将指代用于调用该function的对象(该对象将成为方法调用的invocation context):

var x = 99;

var sample = {

  x:1,

  act:function(a){

    this.x = a*a;//assign value to sample's x, not global object's x.

  }

}

sample.act(6);

console.log(sample.x);//36

console.log(x);//99

与访问对象中的property一样,除了使用点号操作符,JavaScript中还可以通过使用中括号操作符来进行方法调用:

//other ways to invoke method

sample["act"](7);

console.log(sample.x);//49

对于JavaScript中的function,一个比较有趣的行为是可以在function中嵌入function(闭包)。在进行方法调用时,如果方法function中有嵌入的function,那么这个嵌入的function中的代码可以访问到外部的变量值:

//nested function can access variable outside of it.

var y = 88;

var sample2 = {

  y:1,

  act2:function(a){

    this.y = inner();

    function inner(){

      return a*a;

    }

  }

}

sample2.act2(8);

console.log(sample2.y);//64

console.log(y);//88

不过,与直觉相反的是,嵌入function中的代码无法从外部继承this;也就是说,在嵌入的function中,this指代的并不是调用方法的对象,而是全局对象:

//nested function does not inherit "this". The "this" in nested function is global object

var sample3 = {

  act3:function(){

    inner();

    function inner(){

      console.log(this);//window object

    }

  }

}

sample3.act3();

如果确实需要在嵌入function中访问到调用方法的对象,可以在外部function中将this值保存到一个变量中:

//pass "this" to nested function

var sample4 = {

  act4:function(){

    var self = this;

    inner();

    function inner(){

        console.log(self);//Object {act4=function()}

    }

  }

}

sample4.act4();
Javascript 相关文章推荐
JavaScript定时器详解及实例
Aug 01 Javascript
extjs中form与grid交互数据(record)的方法
Aug 29 Javascript
自定义百度分享的分享按钮
Mar 18 Javascript
jquery判断单选按钮radio是否选中的方法
May 05 Javascript
Javascript技术难点之apply,call与this之间的衔接
Dec 04 Javascript
Jquery跨域获得Json的简单实例
May 18 Javascript
jQuery中事件与动画的总结分享
May 24 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
Jul 09 Javascript
使用canvas实现一个vue弹幕组件功能
Nov 30 Javascript
JS实现数组删除指定元素功能示例
Jun 05 Javascript
通过js给网页加上水印背景实例
Jun 17 Javascript
Vue全局使用less样式,组件使用全局样式文件中定义的变量操作
Oct 21 Javascript
JavaScript中的闭包(Closure)详细介绍
Dec 30 #Javascript
JavaScript中的类(Class)详细介绍
Dec 30 #Javascript
JavaScript实现防止网页被嵌入Frame框架的代码分享
Dec 29 #Javascript
jQuery实现ichat在线客服插件
Dec 29 #Javascript
jQuery中用dom操作替代正则表达式
Dec 29 #Javascript
jQuery中:animated选择器用法实例
Dec 29 #Javascript
纯JavaScript实现获取onclick、onchange等事件的值
Dec 29 #Javascript
You might like
关于手调机和数调机的选择
2021/03/02 无线电
php学习之 数组声明
2011/06/09 PHP
Yii2分页的使用及其扩展方法详解
2016/05/23 PHP
基于jquery的blockui插件显示弹出层
2011/04/14 Javascript
使用jquery动态加载javascript以减少服务器压力
2012/10/29 Javascript
JavaScript实现班级随机点名小应用需求的具体分析
2014/05/12 Javascript
jQuery使用之标记元素属性用法实例
2015/01/19 Javascript
NodeJS学习笔记之Connect中间件模块(二)
2015/01/27 NodeJs
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
2015/05/06 Javascript
JavaScript如何获取数组最大值和最小值
2015/11/18 Javascript
JavaScript调试的多个必备小Tips
2017/01/15 Javascript
Vue 表单控件绑定的实现示例
2017/08/11 Javascript
vue对storejs获取的数据进行处理时遇到的几种问题小结
2018/03/20 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
2018/08/15 Javascript
Vue中mintui的field实现blur和focus事件的方法
2018/08/25 Javascript
p5.js实现动态图形临摹
2019/10/23 Javascript
vue中echarts图表大小适应窗口大小且不需要刷新案例
2020/07/19 Javascript
vue移动端写的拖拽功能示例代码
2020/09/09 Javascript
[01:35:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第一场 1月18日
2021/03/11 DOTA
python切换hosts文件代码示例
2013/12/31 Python
从零学python系列之数据处理编程实例(一)
2014/05/22 Python
在Linux中通过Python脚本访问mdb数据库的方法
2015/05/06 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
2016/02/18 Python
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
django url到views参数传递的实例
2019/07/19 Python
Pandas0.25来了千万别错过这10大好用的新功能
2019/08/07 Python
python实现机器人卡牌
2019/10/06 Python
在python image 中实现安装中文字体
2020/05/16 Python
Python实现AES加密,解密的两种方法
2020/10/03 Python
python3爬虫中多线程进行解锁操作实例
2020/11/25 Python
Cocopanda波兰:购买化妆品、护肤品、护发和香水
2020/05/25 全球购物
如何在.net Winform里面显示PDF文档
2012/09/11 面试题
基层工作经历证明
2014/01/13 职场文书
师德学习感言
2014/01/31 职场文书
母亲节感恩寄语
2014/02/21 职场文书