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操作xml
Nov 04 Javascript
Web开发之JavaScript
Mar 29 Javascript
JavaScript中实现最高效的数组乱序方法
Oct 11 Javascript
jquery+easeing实现仿flash的载入动画
Mar 10 Javascript
JS 对象属性相关(检查属性、枚举属性等)
Apr 05 Javascript
理解AngularJs指令
Dec 10 Javascript
js实现根据身份证号自动生成出生日期
Dec 15 Javascript
Javascript缓存API
Jun 14 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
Jul 27 Javascript
基于Node.js实现压缩和解压缩的方法
Feb 13 Javascript
微信小程序实现左侧滑栏过程解析
Aug 26 Javascript
简单分析js中的this的原理
Aug 31 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中Session的概念
2006/10/09 PHP
PHP 编写大型网站问题集
2010/05/07 PHP
小文件php+SQLite存储方案
2010/09/04 PHP
PHP面向对象概念
2011/11/06 PHP
Php中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
2013/06/03 PHP
ThinkPHP连接数据库的方式汇总
2014/12/05 PHP
js常用函数 不错
2006/09/08 Javascript
动态为事件添加js代码示例
2009/02/15 Javascript
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
2009/05/25 Javascript
基于JQuery制作的产品广告效果
2010/12/08 Javascript
jQuery模拟select实现下拉菜单功能
2016/06/20 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
基于JavaScript实现拖动滑块效果
2017/02/16 Javascript
vue.js中mint-ui框架的使用方法
2017/05/12 Javascript
vue中vee validate表单校验的几种基本使用
2018/06/25 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
2018/09/04 Javascript
vue 递归组件的简单使用示例
2021/01/14 Vue.js
[20:30]职业巡回赛回顾
2018/08/09 DOTA
给Python初学者的一些编程技巧
2015/04/03 Python
基于Python Shell获取hostname和fqdn释疑
2016/01/25 Python
python基于phantomjs实现导入图片
2016/05/13 Python
全面了解Python的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
Python编程argparse入门浅析
2018/02/07 Python
python实现超级马里奥
2020/03/18 Python
Python实现疫情地图可视化
2021/02/05 Python
法国太阳镜店:Sunglasses Shop
2016/08/27 全球购物
Booking.com西班牙:全球酒店预订
2018/03/30 全球购物
日本最大美瞳直送网:Morecontact(中文)
2019/04/03 全球购物
Ibatis中如何提高SQL Map的性能
2013/05/11 面试题
开办加工厂创业计划书
2014/01/03 职场文书
化工专业大学生职业生涯规划书
2014/01/14 职场文书
学习党的群众路线剖析材料
2014/10/09 职场文书
博士给导师的自荐信
2015/03/06 职场文书
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers
使用Redis实现点赞取消点赞的详细代码
2022/03/20 Redis