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 相关文章推荐
简单JS代码压缩器
Oct 12 Javascript
javascript 支持ie和firefox杰奇翻页函数
Jul 22 Javascript
jqPlot 图表中文API使用文档及源码和在线示例
Feb 07 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
Aug 12 Javascript
jquery跟js初始化加载的多种方法及区别介绍
Apr 02 Javascript
node.js中的fs.mkdir方法使用说明
Dec 17 Javascript
js实现精确到秒的倒计时效果
May 29 Javascript
jQuery实现二维码扫描功能
Jan 09 Javascript
js删除数组中的元素delete和splice的区别详解
Feb 03 Javascript
vue侧边栏动态生成下级菜单的方法
Sep 07 Javascript
JavaScript实现的拼图算法分析
Feb 13 Javascript
Vue中常用rules校验规则(实例代码)
Nov 14 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变量内存分配问题记录整理
2013/11/27 PHP
JS控制表格隔行变色
2006/06/26 Javascript
extjs 的权限问题 要求控制的对象是 菜单,按钮,URL
2010/03/09 Javascript
你必须知道的Javascript知识点之"this指针"的应用
2013/04/23 Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
2014/06/06 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
js鼠标悬浮出现遮罩层的方法
2015/01/28 Javascript
全面详细的jQuery常见开发技巧手册
2016/02/21 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
详解axios在node.js中的post使用
2017/04/27 Javascript
全选复选框JavaScript编写小结(附代码)
2017/08/16 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
2019/04/17 Javascript
layui prompt 设置允许空白提交的方法
2019/09/24 Javascript
基于js实现复制内容到操作系统粘贴板过程解析
2019/10/11 Javascript
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
javascript操作向表格中动态加载数据
2020/08/27 Javascript
js实现复制粘贴的两种方法
2020/12/04 Javascript
简单实现python画圆功能
2018/01/25 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
Django ORM 自定义 char 类型字段解析
2019/08/09 Python
Python列表去重复项的N种方法(实例代码)
2020/05/12 Python
Python3爬虫中关于Ajax分析方法的总结
2020/07/10 Python
BrandAlley英国:法国折扣奢侈品网上零售商
2017/07/03 全球购物
美国全球旅游运营商:Pacific Holidays
2018/06/18 全球购物
介绍一下Java中的Class类
2015/04/10 面试题
static函数与普通函数有什么区别
2015/12/25 面试题
医院保洁服务方案
2014/06/11 职场文书
个人师德师风自我剖析材料
2014/09/29 职场文书
个人剖析材料范文
2014/09/30 职场文书
元宵节寄语大全
2015/02/27 职场文书
假如给我三天光明读书笔记
2015/06/26 职场文书
文艺演出主持词
2015/07/01 职场文书
JS中一些高效的魔法运算符总结
2021/05/06 Javascript
python 爬取哔哩哔哩up主信息和投稿视频
2021/06/07 Python
javascript Number 与 Math对象的介绍
2021/11/17 Javascript