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监测ActiveX控件是否已经安装过的代码
Sep 02 Javascript
基于jquery DOM写的类似微博发布的效果
Oct 20 Javascript
js 获取和设置css3 属性值的实现方法
May 06 Javascript
通过action传过来的值在option获取进行验证的方法
Nov 14 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
Nov 29 Javascript
简单实现jquery焦点图
Dec 12 Javascript
Bootstrap CSS组件之导航条(navbar)
Dec 17 Javascript
使用Node.js实现RESTful API的示例
Aug 01 Javascript
JavaScript实现删除数组重复元素的5种常用高效算法总结
Jan 18 Javascript
Vue调用后端java接口的实例代码
Oct 28 Javascript
解决Vue在Tomcat8下部署页面不加载的问题
Nov 12 Javascript
vue实现图片懒加载的方法分析
Feb 05 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
在PHP中使用与Perl兼容的正则表达式
2006/11/26 PHP
解析php下载远程图片函数 可伪造来路
2013/06/25 PHP
php计算两个文件相对路径的方法
2015/03/14 PHP
wampserver改变默认网站目录的办法
2015/08/05 PHP
10个超级有用的PHP代码片段果断收藏
2015/09/23 PHP
Discuz论坛密码与密保加密规则
2016/12/19 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
Javascript中的String对象详谈
2014/03/03 Javascript
玩转方法:call和apply
2014/05/08 Javascript
JavaScript中的6种运算符总结
2014/10/16 Javascript
js 左右悬浮对联广告代码示例
2014/12/12 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
2016/02/02 Javascript
javascript实现可键盘控制的抽奖系统
2016/03/10 Javascript
jQuery插件passwordStrength密码强度指标详解
2016/06/24 Javascript
JS实现字符串转驼峰格式的方法
2016/12/16 Javascript
Angular中使用$watch监听object属性值的变化(详解)
2017/04/24 Javascript
关于使用js算总价的问题
2017/06/23 Javascript
微信小程序云开发之模拟后台增删改查
2019/05/16 Javascript
bootstrap table列和表头对不齐的解决方法
2019/07/19 Javascript
VUE项目初建和常见问题总结
2019/09/12 Javascript
Node.js API详解之 os模块用法实例分析
2020/05/06 Javascript
Vue使用v-viewer实现图片预览
2020/10/21 Javascript
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
Tensorflow之梯度裁剪的实现示例
2020/03/08 Python
物流专业大学的自我评价
2014/01/11 职场文书
2014年标准化工作总结
2014/12/17 职场文书
幼师必备:幼儿园期末教师评语50条
2019/11/01 职场文书
php实现自动生成验证码的实例讲解
2021/11/17 PHP
利用Sharding-Jdbc进行分库分表的操作代码
2022/01/22 Java/Android
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL