javascript中的四种函数调用

javascript中的四种函数调用

ID:8817007

大小:54.00 KB

页数:4页

时间:2018-04-08

javascript中的四种函数调用_第1页
javascript中的四种函数调用_第2页
javascript中的四种函数调用_第3页
javascript中的四种函数调用_第4页
资源描述:

《javascript中的四种函数调用》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、javascript中四种函数调用模式及对this的不同绑定By saymoon on 2009年10月27日撰写此文源于最近在看DouglasCrockford的’JavaScript:TheGoodParts’中文译本《Javascript语言精粹》时,发现一些自己不知道或者没有一下子理解的东西,拿出来细细研究并记录一下。函数被作为很重要的一部分在书中做了详细的介绍和举例。感觉函数的四种调用方式和在不同调用方式上’this’绑定的不同是个重点也是难点。欢迎大家一起研究。方法调用模式:调用形式:通过’.'点表达式或[

2、subscript]下标表达式调用一个对象中的方法。this绑定:this被绑定到被调用方法所属的对象上。例子:帮助123456789101112131415161718192021222324// 创建myObject对象。它有一个value属性和一个increment方法。// increment方法接收一个可选参数。如果参数不是数字,那么默认使用数字1。

 

varg='global';

 

varmyObject={    value:0,    increment:function(inc

3、){        document.writeln(this.g);        this.value+=typeofinc==='number'?inc:1;   // 在方法被调用时this被绑定为myObject对象。    }};

 

document.writeln(this.g);    // global                                 // 打印出全局变量g的值,说明this被绑定在全局对象上。myObject.increment();   // 在这里in

4、crement方法才被调用,this才被绑定到myObject对象,这是特有“超级”迟绑定(verylatebinding)。                            // 这时打印出的this.g为undefined,因为myObject中没有g这个属性,可以看出这时this被绑定到了myObject对象上。

 

document.writeln(myObject.value);   // 1document.writeln(this.g);    // global             

5、                    // 打印出全局变量g的值,函数调用结束后,this又被从myObject对象上绑定回全局对象上。

 

myObject.increment(2);document.writeln(myObject.value);   // 3函数调用模式:调用形式:当一个函数并非一个对象的属性时,它被当作一个函数来调用。this绑定:this被绑定到全局对象上。例子:执行下面的代码会发现,输出的结果是全局对象中g的值,与我们预期的结果不同,this被错误地绑定到全局对象上,这是Jav

6、aScript语言设计上的一个错误。帮助123456varg='global';

 

varo=function(){    varg='self';document.writeln(this.g);   // global   this被错误地绑定到全局对象。}();如果设计正确的话,当内部函数被调用时,this应该绑定到外部函数的this变量。解决该错误的方法:在函数中定义一个变量并给它赋值为this,那么内部函数就可以通过那个变量访问到被绑定到外部函数的正确this。按照约定,我们给那个变量命名为tha

7、t。帮助123456789101112131415varadd=function(a,b){    returna+b;};

 

// 给myObject增加一个double方法。

 

myObject.double=function(){    varthat=this;   // 解决方法

 
varhelper=function(){that.value=add(that.value,that.value);   // 这里的that被绑定到外部函数myObject.

8、double上}; helper();   // 以函数的形式调用helper1617181920

 

};

 

myObject.double();document.writeln(myObject.value);   // 6构造器调用模式:调用形式:在函数名前加new来调用。this绑定

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。