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 相关文章推荐
jsTree树控件(基于jQuery, 超强悍)[推荐]
Sep 01 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
May 13 Javascript
js取值中form.all和不加all的区别介绍
Jan 20 Javascript
JS中的构造函数详细解析
Mar 10 Javascript
jQuery垂直多级导航菜单代码分享
Aug 18 Javascript
bootstrap下拉列表与输入框组结合的样式调整
Oct 08 Javascript
超全面的vue.js使用总结
Feb 12 Javascript
详解Angular.js数据绑定时自动转义html标签及内容
Mar 30 Javascript
使用Node.js实现ORM的一种思路详解(图文)
Oct 24 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
Jun 17 Javascript
在layui中select更改后生效的方法
Sep 05 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
Feb 06 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/02/28 PHP
深入PHP中的HashTable结构详解
2013/06/13 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
2013/06/25 PHP
php开启与关闭错误提示适用于没有修改php.ini的权限
2014/10/16 PHP
PHP实现的带超时功能get_headers函数
2015/02/10 PHP
服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
2007/03/06 Javascript
为jQuery增加join方法的实现代码
2010/11/28 Javascript
jquery操作复选框(checkbox)的12个小技巧总结
2014/02/04 Javascript
JavaScript中Cookie操作实例
2015/01/09 Javascript
javascript实现行拖动的方法
2015/05/27 Javascript
javascript针对cookie的基本操作实例详解
2015/11/30 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
AngularJs 禁止模板缓存的方法
2017/11/28 Javascript
JS+HTML5实现获取手机验证码倒计时按钮
2018/08/08 Javascript
VUE DOM加载后执行自定义事件的方法
2018/09/07 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
JavaScript:ES2019 的新特性(译)
2019/08/08 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
十分钟教你上手ES2020新特性
2020/02/12 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
2020/06/08 Javascript
Python类方法__init__和__del__构造、析构过程分析
2015/03/06 Python
python实现12306抢票及自动邮件发送提醒付款功能
2018/03/08 Python
浅谈python写入大量文件的问题
2018/11/09 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
CSS3 实现图形下落动画效果
2020/11/13 HTML / CSS
马来西亚太阳镜、眼镜和隐形眼镜网上商店:Focus Point
2018/12/13 全球购物
NBA欧洲商店(西班牙):NBA Europe Store ES
2019/04/16 全球购物
英国最大的在线亚洲杂货店:Red Rickshaw
2020/03/22 全球购物
面向对象设计的原则是什么
2013/02/13 面试题
计算机专业学生求职信分享
2013/12/15 职场文书
调查研究项目计划书
2014/04/29 职场文书
离职保密承诺书
2014/05/28 职场文书
银行岗位培训心得体会
2016/01/09 职场文书
八年级英语教学反思
2016/02/15 职场文书
redis中lua脚本使用教程
2021/11/01 Redis
Python基本的内置数据类型及使用方法
2022/04/13 Python