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 相关文章推荐
学习YUI.Ext 第二天
Mar 10 Javascript
两个比较有用的Javascript工具函数代码
Feb 17 Javascript
高效率JavaScript编写技巧整理
Aug 23 Javascript
防止jQuery ajax Load使用缓存的方法小结
Feb 22 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
Jun 13 Javascript
基于Jquery和html5的7款个性化地图插件
Nov 17 Javascript
基于JS实现数字+字母+中文的混合排序方法
Jun 06 Javascript
轻松掌握JavaScript中介者模式
Aug 26 Javascript
vue单页应用在页面刷新时保留状态数据的方法
Sep 21 Javascript
vue打包之后生成一个配置文件修改接口的方法
Dec 09 Javascript
Vue全局loading及错误提示的思路与实现
Aug 09 Javascript
在JavaScript中实现链式调用的实现
Dec 24 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
德劲1103二次变频版的打磨
2021/03/02 无线电
如何使用PHP往windows中添加用户
2006/12/06 PHP
破解.net程序(dll文件)编译和反编译方法
2013/01/31 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
JavaScript高级程序设计 读书笔记之八 Function类及闭包
2012/02/27 Javascript
浅谈javascript中createElement事件
2014/12/05 Javascript
JQuery中DOM事件绑定用法详解
2015/06/13 Javascript
jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
2015/10/23 Javascript
jQuery实现下拉加载功能实例代码
2016/04/01 Javascript
jquery ajax局部加载方法详解(实现代码)
2016/05/12 Javascript
深入浅析JavaScript的API设计原则
2016/06/14 Javascript
AngularJS入门教程之模块化操作用法示例
2016/11/02 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
详解js树形控件—zTree使用总结
2016/12/28 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
微信小程序之自定义组件的实现代码(附源码)
2018/08/02 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
layui table设置某一行的字体颜色方法
2019/09/05 Javascript
微信小程序订阅消息(java后端实现)开发
2020/06/01 Javascript
Python 不同对象比较大小示例探讨
2014/08/21 Python
分析Python编程时利用wxPython来支持多线程的方法
2015/04/07 Python
Python连接mysql数据库的正确姿势
2016/02/03 Python
Python通过调用有道翻译api实现翻译功能示例
2018/07/19 Python
Django框架组成结构、基本概念与文件功能分析
2019/07/30 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
2019/08/09 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
2020/12/14 Python
阿根廷在线宠物商店:Puppis
2018/03/23 全球购物
Unix如何添加新的用户
2014/08/20 面试题
小学生考试获奖感言
2014/01/30 职场文书
多媒体专业自我鉴定
2014/02/28 职场文书
售后服务承诺书模板
2014/05/21 职场文书
会计演讲稿范文
2014/05/23 职场文书
公司法人授权委托书范本
2014/09/12 职场文书
医生个人年终总结
2015/02/28 职场文书