关于Javascript中this的指向以及一些应用

来源:互联网 发布:商标域名 经销商品 编辑:程序博客网 时间:2024/06/07 14:39

关于Javascript中this的指向以及一些应用

本文中大部分观点来自 彻底理解js中this的指向,不必硬背 非常感谢作者

1. 关于this最重要的几个结论

情况1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window,这里需要说明的是在js的严格版中this指向的不是window,但是我们这里不探讨严格版的问题,你想了解可以自行上网查找。

情况2:如果一个函数中有this,这个函数有被上一级的对象所调用,那么this指向的就是上一级的对象。

情况3:如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象

情况4:如果return一个对象,则this指向该对象

具体的代码示例请看原文

2. 关于this的应用

  1. 链式调用
function Util () {  this.chain = function (a) {    this.tem = a    return this  }  this.sum = function (b) {    this.tem += b    return this  }  this.sub = function (c) {    this.tem -= c    return this  }  this.value = function () {    const tem = this.tem    this.tem = undefined    return tem  }}var u = new Util()console.log(u.chain(1).sum(2).sum(3).sub(4).value()) //2
  • 如上情况3,如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象
  • 所以若要实现链式调用,就必须保证每次调用的方法都指向Util,此时只需在方法中return this就能实现,因为value的this指向sub,而sub的this指向第二个sum。。。以此类推,最终都指向的u,即一个Util实例(new 运算符会创建一个空对象,并讲Util的属性和方法都复制一份,最终赋值给u),这就实现了链式调用
原创粉丝点击