码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript 方法调用模式和函数调用模式

时间:2017-02-25 16:46:50      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:span   命名   strong   保存   包含   var   java   logs   code   

这两天在读《JavaScript语言精粹》关于第4章函数调用的几种模式琢磨了半天。

这里就说一下方法调用模式函数调用模式。


方法调用模式:

当一个函数被保存为对象的一个属性时,我们称它为一个方法。当一个方法被调用时,this被绑定到该对象。如果调用表达式包含一个提取属性的动作(a.name或a[name]),那么他就是被当做一个方法调用。

1 var myObject = {
2     value:1,
3     double:function(){ //double是myObject对象的一个方法
4         this.value = this.value*2;
5     }
6 };
7 myObject.double(); //2

函数调用模式:

当一个函数并非一个对象的属性时,那么他就是被当做一个函数来调用的:

此时要注意,以此模式调用函数时,this被绑定到全局对象。

 1 var myObject = {
 2     value:1
 3 };
 4 myObject.double =function () {
 5     var helper = function () {  //helper不是对象的属性,因此this指向全局对象Window
 6         this.value = this.value*2;
 7     }
 8     helper();
 9 } ;
10 myObject.double(); //1,value的值不会发生改变

我们可以为该方法double定义一个变量,并赋值为this,那么内部函数就可以通过那个变量访问到this。按照约定,我们把那个变量命名为that:

 1 var myObject = {
 2     value:1
 3 };
 4 myObject.double = function () {
 5     var that = this;    //定义变量that,并给它赋值为this
 6     var helper = function () {
 7         that.value = that.value*2;
 8     }
 9     helper();
10 }
11 myObject.double(); //2,由于间接的访问了this,value最终发生了改变

 

JavaScript 方法调用模式和函数调用模式

标签:span   命名   strong   保存   包含   var   java   logs   code   

原文地址:http://www.cnblogs.com/miaodi/p/6442017.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!