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 相关文章推荐
cnblogs csdn 代码运行框实现代码
Nov 02 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
Nov 07 Javascript
使用jQuery实现的掷色子游戏动画效果
Mar 14 Javascript
Node.js中require的工作原理浅析
Jun 24 Javascript
一个JavaScript递归实现反转数组字符串的实例
Oct 14 Javascript
javascript基本语法
May 31 Javascript
JavaScript中浅讲ajax图文详解
Nov 11 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
Apr 11 Javascript
Vue使用Proxy监听所有接口状态的方法实现
Jun 07 Javascript
jQuery实现验证用户登录
Dec 10 jQuery
vue中是怎样监听数组变化的
Oct 24 Javascript
js之ajax文件上传
May 13 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
肝肠寸断了解下!盘点史上最伤心的十大动漫
2020/03/04 日漫
淘宝ip地址查询类分享(利用淘宝ip库)
2014/01/07 PHP
ThinkPHP中数据操作案例分析
2015/09/27 PHP
PHP错误Warning:mysql_query()解决方法
2015/10/24 PHP
php preg_match的匹配不同国家语言实例
2016/12/29 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
jquery 新浪网易的评论块制作
2010/07/01 Javascript
js hover 定时器(实例代码)
2013/11/12 Javascript
跟我学Nodejs(二)--- Node.js事件模块
2014/05/21 NodeJs
js键盘事件的keyCode
2014/07/29 Javascript
浅谈javascript的url参数parse和build函数
2017/03/04 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
jQuery实现所有验证通过方可提交的表单验证
2017/11/21 jQuery
基于Vuex无法观察到值变化的解决方法
2018/03/01 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
详解webpack打包nodejs项目(前端代码)
2018/09/19 NodeJs
vue给组件传递不同的值方法
2018/09/29 Javascript
vue  自定义组件实现通讯录功能
2018/09/30 Javascript
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
js实现贪吃蛇小游戏
2019/10/29 Javascript
Python实现多线程下载文件的代码实例
2014/06/01 Python
将Python代码嵌入C++程序进行编写的实例
2015/07/31 Python
python爬取亚马逊书籍信息代码分享
2017/12/09 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
2018/02/26 Python
Python之列表的插入&替换修改方法
2018/06/28 Python
Win10下python3.5和python2.7环境变量配置教程
2018/09/18 Python
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
pyttsx3实现中文文字转语音的方法
2018/12/24 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
2020/05/03 Python
html table呈现个人简历以及单元格宽度失效的问题解决
2021/01/22 HTML / CSS
ziaja齐叶雅官方海外旗舰店:来自波兰的天然护肤品牌
2017/01/02 全球购物
英国鞋网:Rubber Sole
2020/03/03 全球购物
校园十佳歌手策划书
2014/01/22 职场文书
宣传委员竞选稿
2015/11/19 职场文书
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android