Javascript中的this,bind和that使用实例


Posted in Javascript onDecember 05, 2019

这篇文章主要介绍了Javascript中的this,bind和that使用实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Javascript中必须通过this来访问类成员,可是this的特点就是函数绑在哪个对象上,它就指向那个对象。这个可能困扰过很多的程序员,特别是从C#,Java等语言过来的程序员。

function Foo(){
  this.message = 'This is message from Foo';
}

Foo.prototype.printMessage = function(){
  console.log(this.message);
}

function Foo2(){
  this.message = 'This is message from Foo2';
}

var foo = new Foo();
foo.printMessage();

var foo2 = new Foo2();
foo2.printMessage = foo.printMessage;
foo2.printMessage();

输出为:

This is message from Foo

This is message from Foo2

主要原因就是this改变了,因此Javascript中this的用法,和C++\C#中的大为不同。如果需要传统方式使用this的函数,可以使用Function.prototype.bind(),指定函数的this值:

function Foo(){
  this.message = 'This is message from Foo';
  
  this.printMessage = (function(){
    console.log(this.message);
  }).bind(this);
}

function Foo2(){
  this.message = 'This is message from Foo2';
}

var foo = new Foo();
foo.printMessage();

var foo2 = new Foo2();
foo2.printMessage = foo.printMessage;
foo2.printMessage();

输出为:

This is message from Foo

This is message from Foo

另外使用call和apply也可以改变函数调用时的this值。

bind函数的主要问题是IE9以后才开始提供。并且一旦开始习惯了Javascript的this用法,这种bind反而会不习惯。在实践中,更多用到的还是保存this:

function Foo(){
  var that = this;
  
  this.message = 'This is message from Foo';
  
  this.printMessage = function(){
    console.log(that.message);
  };
}

function Foo2(){
  this.message = 'This is message from Foo2';
}

var foo = new Foo();
foo.printMessage();

var foo2 = new Foo2();
foo2.printMessage = foo.printMessage;
foo2.printMessage();

输出同上。

注意我们是通过that来访问的message(除了that,context和self也是常用的名称)。Javascript一个还算欣慰的地方就是他的闭包上下文始终是在函数定义的地方,因此不管函数被挂上哪个对象上,捕获到的that始终是这个。当然这个地方不算闭包,有闭无包,但原理是相同的。这也是实践中用的最多的方法,推荐使用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
自动生成文章摘要的代码[JavaScript 版本]
Mar 20 Javascript
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
May 14 Javascript
javascript与asp.net(c#)互相调用方法
Dec 13 Javascript
JavaScript动态调整TextArea高度的代码
Dec 28 Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
Apr 08 Javascript
javascript实现抽奖程序的简单实例
Jun 07 Javascript
Node.js实现文件上传的示例
Jun 28 Javascript
JavaScript之filter_动力节点Java学院整理
Jun 28 Javascript
原生JS上传大文件显示进度条 php上传文件代码
Mar 27 Javascript
vue中改变选中当前项的显示隐藏或者状态的实现方法
Feb 08 Javascript
vue组件开发props验证的实现
Feb 12 Javascript
vue实现动态表格提交参数动态生成控件的操作
Nov 09 Javascript
原生JS与CSS实现软件卸载对话框功能
Dec 05 #Javascript
Vue快速实现通用表单验证功能
Dec 05 #Javascript
Vue组件通信中非父子组件传值知识点总结
Dec 05 #Javascript
基于javascript实现贪吃蛇经典小游戏
Apr 10 #Javascript
微信小程序登录时如何获取input框中的内容
Dec 04 #Javascript
微信小程序日历插件代码实例
Dec 04 #Javascript
微信小程序request请求封装,验签代码实例
Dec 04 #Javascript
You might like
Yii2压缩PHP中模板代码的输出问题
2018/08/28 PHP
json 入门基础教程 推荐
2009/10/31 Javascript
JQuery下的Live方法和$.browser方法使用代码
2010/06/02 Javascript
javascript下对于事件、事件流、事件触发的顺序随便说说
2010/07/17 Javascript
读jQuery之十四 (触发事件核心方法)
2011/08/23 Javascript
javascript实现div的显示和隐藏的小例子
2013/06/25 Javascript
jquery的flexigrid无法显示数据提示获取到数据
2013/07/19 Javascript
javascript实现tab切换特效
2015/11/12 Javascript
jQuery获取某天的农历日期并判断是否除夕或新年的方法
2016/03/01 Javascript
AngularJS中的缓存使用
2017/01/11 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
2017/03/07 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
2019/07/10 jQuery
JS中的算法与数据结构之队列(Queue)实例详解
2019/08/20 Javascript
微信小程序 textarea 层级过高问题简单解决方案
2019/10/14 Javascript
Angular利用HTTP POST下载流文件的步骤记录
2020/07/26 Javascript
前端vue如何使用高德地图
2020/11/05 Javascript
详解ES6实现类的私有变量的几种写法
2021/02/10 Javascript
Python语言技巧之三元运算符使用介绍
2013/03/04 Python
python使用pil生成图片验证码的方法
2015/05/08 Python
Python合并两个字典的常用方法与效率比较
2015/06/17 Python
在Python程序中操作MySQL的基本方法
2015/07/29 Python
Python实现的选择排序算法原理与用法实例分析
2017/11/22 Python
python基于itchat模块实现微信防撤回
2019/04/29 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
2019/06/17 Python
基于注解实现 SpringBoot 接口防刷的方法
2021/03/02 Python
加拿大便宜的隐形眼镜商店:Clearly
2016/09/15 全球购物
Grow Gorgeous美国官网:只要八天,体验唤醒毛囊后新生的茂密秀发
2018/06/04 全球购物
Tod’s英国官方网站:意大利奢华手工制作手袋和鞋履
2019/03/15 全球购物
建筑施工实习自我鉴定
2013/09/19 职场文书
总结表彰大会主持词
2014/03/26 职场文书
物业总经理助理岗位职责
2014/06/29 职场文书
周末问候语大全
2015/11/10 职场文书
2016年安康杯竞赛活动总结
2016/04/05 职场文书
送给小学生的暑假礼物!小学生必背99首古诗
2019/07/02 职场文书
CSS3 制作的书本翻页特效
2021/04/13 HTML / CSS
spring cloud eureka 服务启动失败的原因分析及解决方法
2022/03/17 Java/Android