实例讲解JavaScript中的this指向错误解决方法


Posted in Javascript onJune 13, 2016

看如下对象定义:

'use strict'
var jane = {
  name : ‘Jane',
  display : function(){
    retrun 'Person named ' + this.name;
  }
};

这样能正常调用

jane.display();

下面的调用会出错:

var func = jane.display;
func()
TypeError: Cannot read property 'name' of undefined

因为,this指向已经改变,正确的方式如下:

var func2 = jane.display.bind(jane);
func2()
'Penson named Jane'

所有函数都有其特殊的this变量,如下面的forEach

var jane = {
  name : 'Jane',
  friends: ['Tarzan', 'Cheeta'],
  sayHiToFriends: function(){
    'use strict';
    this.friends.forEach(function(friend) {
      // 'this' is undefined here
      console.log(this.name + ' says hi to '+ friend);
    });
  }
}

调用sayHiToFriends会产生一个错误:

jane.sayHiToFriends()
TypeError: Cannot read property 'name' of undefined

解决方案一:将this保存在不同的变量中

var jane = {
  name : 'Jane',
  friends: ['Tarzan', 'Cheeta'],
  sayHiToFriends: function(){
    'use strict';
    var that = this;
    this.friends.forEach(function(friend) {
      console.log(that.name + ' says hi to '+ friend);
    });
  }
}

解决方案二:利用forEach的第二个参数,它可以给this指定一个值

var jane = {
  name : 'Jane',
  friends: ['Tarzan', 'Cheeta'],
  sayHiToFriends: function(){
    'use strict';
    this.friends.forEach(function(friend) {
      console.log(this.name + ' says hi to '+ friend);
    }, this);
  }
}
Javascript 相关文章推荐
点图片上一页下一页翻页效果
Jul 09 Javascript
javascript利用初始化数据装配模版的实现代码
Nov 17 Javascript
JavaScript高级程序设计 XML、Ajax 学习笔记
Sep 10 Javascript
Backbone.js中的集合详解
Jan 14 Javascript
JavaScript中Date对象的常用方法示例
Oct 24 Javascript
JavaScript地理位置信息API
Jun 11 Javascript
详解基于javascript实现的苹果系统底部菜单
Dec 02 Javascript
JQueryMiniUI按照时间进行查询的实现方法
Jun 07 jQuery
jQuery使用bind函数实现绑定多个事件的方法
Oct 11 jQuery
浅谈Vue.nextTick 的实现方法
Oct 25 Javascript
jQuery实现的简单手风琴效果示例
Aug 29 jQuery
package.json中homepage属性的作用详解
Mar 11 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
Jun 13 #Javascript
BootStrap 智能表单实战系列(十)自动完成组件的支持
Jun 13 #Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
Jun 13 #Javascript
浅谈JavaScript对象的创建方式
Jun 13 #Javascript
BootStrap智能表单实战系列(八)表单配置json详解
Jun 13 #Javascript
BootStrap智能表单实战系列(七)验证的支持
Jun 13 #Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
Jun 13 #Javascript
You might like
社区(php&&mysql)二
2006/10/09 PHP
通俗易懂的php防注入代码
2010/04/07 PHP
javascript some()函数用法详解
2014/11/13 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
精选的10款用于构建良好易用性网站的jQuery插件
2011/01/23 Javascript
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
用javascript作一个通用向导说明
2011/08/30 Javascript
jquery制作居中遮罩层效果分享
2014/02/21 Javascript
深入理解JS DOM事件机制
2016/08/06 Javascript
聊一聊JS中的prototype
2016/09/29 Javascript
利用nodejs监控文件变化并使用sftp上传到服务器
2017/02/18 NodeJs
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
利用CDN加速react webpack打包后的文件详解
2018/02/22 Javascript
JavaScript多态与封装实例分析
2018/07/27 Javascript
原生JS实现的简单轮播图功能【适合新手】
2018/08/17 Javascript
微信小程序实现通过js操作wxml的wxss属性示例
2018/12/06 Javascript
小程序如何构建骨架屏
2019/05/29 Javascript
公众号SVG动画交互实战代码
2020/05/31 Javascript
简单了解vue 插值表达式Mustache
2020/07/22 Javascript
python运行时间的几种方法
2016/06/17 Python
pycharm安装图文教程
2017/05/02 Python
详解django中使用定时任务的方法
2018/09/27 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
2019/04/16 Python
基于python监控程序是否关闭
2020/01/14 Python
python基于selenium爬取斗鱼弹幕
2021/02/20 Python
Canvas引入跨域的图片导致toDataURL()报错的问题的解决
2018/09/19 HTML / CSS
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
一份报关员的职业规划范文
2014/01/08 职场文书
理工大学毕业生自荐信范文
2014/02/22 职场文书
三方协议书范本
2014/04/22 职场文书
环保倡议书400字
2014/05/15 职场文书
环境科学专业求职信
2014/08/04 职场文书
公务员群众路线心得体会
2014/11/03 职场文书
党的群众路线教育实践活动个人对照检查材料(四风)
2014/11/05 职场文书
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技