[心缘地方]同学录
首页 | 功能说明 | 站长通知 | 最近更新 | 编码查看转换 | 代码下载 | 常见问题及讨论 | 《深入解析ASP核心技术》 | 王小鸭自动发工资条VBA版
登录系统:用户名: 密码: 如果要讨论问题,请先注册。

[转帖]JavaScript—在嵌套的内部函数中调用外部this的三种方法

上一篇:[GDS]GV2 fare就是最少两人的小团价
下一篇:[备忘]xStream输出XML时,两个双下划的问题

添加日期:2017/11/3 20:19:08 快速返回   返回列表 阅读2456次
原文:
http://blog.csdn.net/jlu16/article/details/77727639
-------------------------------------------
在javascript中经常出现函数中嵌套函数的情况。尤其是在对象函数中嵌套的函数,往往需要调用外部函数(对象函数)的this。但是如果直接在内部里调用this,得到的是当前函数(内部函数)的this。


var obj = {
    name: 'jane',
    friends: ['tarzan','cheeta'],
    loop: function() {
        this.friends.forEach(
            function (friend) {
                console.log(this.name + 'knows '+friend);
            }
        ); //forEach
    } //loop
}; //obj



如果直接 obj.loop();是无法成功的,因为console.log(this.name……一句中的this并非指向obj,而是指向function (friend)…的执行环境,即函数loop。而函数loop中并没有定义this.name。

一定注意:this默认指向执行当前函数的外部环境对象!

----------------------------------------------------
解决方法:

一.

由于在内部函数 function(friend) 中将this同名覆盖了,如果预先将外部的this保存在一个不会被覆盖的量中,便可在内部函数中直接使用。

即在loop: function()中加入 var that = this ,在loop: function() 的内部函数中将this调用改为that调用。
-------------------------
二.

使用bind函数的thisValue参数将内部函数的this绑定为外部的this。

将function (friend) {…} 改为 function (friend) {…}.bind(this) 。
-------------------------
三.

这个方法针对forEach()的调用。forEach可以在调用时提供第二个参数,这个参数成为forEach调用的函数的this变量。

this.friends.forEach(function(){…},this);
 

评论 COMMENTS
没有评论 No Comments.

添加评论 Add new comment.
昵称 Name:
评论内容 Comment:
验证码(不区分大小写)
Validation Code:
(not case sensitive)
看不清?点这里换一张!(Change it here!)
 
评论由管理员查看后才能显示。the comment will be showed after it is checked by admin.
CopyRight © 心缘地方 2005-2999. All Rights Reserved