JavaScript中this的用法及this在不同应用场景的作用解析


Posted in Javascript onApril 13, 2017

由于其运行期绑定的特性,JavaScript 中的 this 含义要丰富得多,它可以是全局对象、当前对象或者任意对象,这完全取决于函数的调用方式。

JavaScript 中函数的调用有以下几种方式:作为函数调用,作为对象方法调用,作为构造函数调用,和使用 apply 或 call 调用。下面我们将按照调用方式的不同,分别讨论 this 的含义。

情况一:纯粹的函数调用

这是函数的最通常用法,属于全局性调用,因此this就代表全局对象Global。

1、函数也可以直接被调用,此时 this 绑定到全局对象。

function makeNoSense(x) { 
  this.x = x; 
} 
makeNoSense(5); 
console.log(x);// x 已经成为一个值为 5 的全局变量
function test(){
this.x = 1;

alert(this.x);
}
test(); // 1

情况二:作为对象方法的调用

函数还可以作为某个对象的方法调用,这时this指代对象内部属性被调用。

var myObject = {
value :0,

increment:function (inc){


this.value += typeof inc ==='number' ? inc:1;

}
};
myObject.increment();
console.log(myObject.value); //1
myObject.increment(2);
console.log(myObject.value); //3

情况三 :作为构造函数调用

javaScript 支持面向对象式编程,与主流的面向对象式编程语言不同,JavaScript 并没有类(class)的概念,而是使用基于原型(prototype)的继承方式。

相应的,JavaScript 中的构造函数也很特殊,如果不使用 new 调用,则和普通函数一样。作为又一项约定俗成的准则,构造函数以大写字母开头,提醒调用者使用正确的方式调用。如果调用正确,this 绑定到新创建的对象上。

所谓构造函数,就是通过这个函数生成一个新对象(object)。这时,this就指这个新对象。

function Point(x, y){ 
  this.x = x; 
  this.y = y; 
 }
var p1 = new Point(3,2);
console.log(p1.x+","+p1.y);//3,2

为了表明这时this不是全局对象,我对代码做一些改变:

var x = 4;
function Point(x, y){ 
  this.x = x; 
  this.y = y; 
 }
var p1 = new Point(3,2);
console.log(p1.x+","+p1.y);//3,2

情况四: apply或call调用

让我们再一次重申,在 JavaScript 中函数也是对象,对象则有方法,apply 和 call 就是函数对象的方法。这两个方法异常强大,他们允许切换函数执行的上下文环境(context),即 this 绑定的对象。很多 JavaScript 中的技巧以及类库都用到了该方法。让我们看一个具体的例子:

function Point(x, y){ 
  this.x = x; 
  this.y = y; 
  this.moveTo = function(x, y){ 
    this.x = x; 
    this.y = y; 
    console.log(this.x+","+this.y);
  } 
} 
var p1 = new Point(0, 0); 
var p2 = {x: 0, y: 0}; 
p1.moveTo(1, 1); //1,1
p1.moveTo.apply(p2, [10, 10]);//10,10

在上面的例子中,我们使用构造函数生成了一个对象 p1,该对象同时具有 moveTo 方法;使用对象字面量创建了另一个对象 p2,我们看到使用 apply 可以将 p1 的方法应用到 p2 上,这时候 this 也被绑定到对象 p2 上。另一个方法 call 也具备同样功能,不同的是最后的参数不是作为一个数组统一传入,而是分开传入的。本文通过对JavaScript中经常容易混淆的this在四中应用场景中的使用方法进行了讲解,希望对您有所帮助,喜欢的话,请推荐一下哦。

以上所述是小编给大家介绍的JavaScript中this的用法及this在不同应用场景的作用解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
统一接口:为FireFox添加IE的方法和属性的js代码
Mar 25 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
Mar 01 Javascript
html超链接打开窗口大小的方法
Mar 05 Javascript
实用框架(iframe)操作代码
Oct 23 Javascript
基于jQuery的JavaScript模版引擎JsRender使用指南
Dec 29 Javascript
javascript中eval函数用法分析
Apr 25 Javascript
通用无限极下拉菜单的实现代码
May 31 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
Jul 12 Javascript
js正则表达式注册页面表单验证
Oct 11 Javascript
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
Jan 12 Javascript
vscode+gulp轻松开发小程序的完整步骤
Oct 18 Javascript
vue引入Excel表格插件的方法
Apr 28 Vue.js
vue如何引用其他组件(css和js)
Apr 13 #Javascript
JavaScript数据结构之二叉树的遍历算法示例
Apr 13 #Javascript
为Jquery EasyUI 组件加上清除功能的方法(详解)
Apr 13 #jQuery
vue组件如何被其他项目引用
Apr 13 #Javascript
微信小程序开发之数据存储 参数传递 数据缓存
Apr 13 #Javascript
为JQuery EasyUI 表单组件增加焦点切换功能的方法
Apr 13 #jQuery
老生常谈javascript中逻辑运算符&&和||的返回值问题
Apr 13 #Javascript
You might like
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
将时间以距今多久的形式表示,PHP,js双版本
2012/09/25 PHP
PHP开发微信支付的代码分享
2014/05/25 PHP
深入浅析用PHP实现MVC
2016/03/02 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
2013/01/23 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
2016/05/04 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
2017/10/12 Javascript
小程序实现左滑删除功能
2018/10/30 Javascript
vue实现搜索过滤效果
2019/05/28 Javascript
深入学习js函数的隐式参数 arguments 和 this
2019/06/24 Javascript
react中hook介绍以及使用教程
2020/12/11 Javascript
python使用append合并两个数组的方法
2015/04/28 Python
python计算圆周率pi的方法
2015/07/11 Python
Python基于有道实现英汉字典功能
2015/07/25 Python
Python数组定义方法
2016/04/13 Python
13个最常用的Python深度学习库介绍
2017/10/28 Python
浅谈django model postgres的json字段编码问题
2018/01/05 Python
selenium获取当前页面的url、源码、title的方法
2019/06/12 Python
Pandas分组与排序的实现
2019/07/23 Python
python socket 聊天室实例代码详解
2019/11/14 Python
Python3.7+tkinter实现查询界面功能
2019/12/24 Python
k-means 聚类算法与Python实现代码
2020/06/01 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
2020/12/17 Python
想学画画?python满足你!
2020/12/24 Python
德国奢侈品网上商城:Mytheresa
2016/08/24 全球购物
Backcountry旗下的户外商品闪购网站:steep&cheap
2016/09/22 全球购物
美国知名的摄影器材销售网站:Adorama
2017/02/01 全球购物
Mountain Hardwear官网:攀岩服装和户外装备
2019/09/26 全球购物
俄罗斯游戏商店:Buka
2020/03/01 全球购物
代办出身证明书
2014/10/21 职场文书
三八妇女节慰问信
2015/02/14 职场文书
教师创先争优承诺书
2015/04/27 职场文书
课文《燕子》教学反思
2016/02/17 职场文书
CSS中calc(100%-100px)不加空格不生效
2023/05/07 HTML / CSS