JavaScript中this杂笔

2022-01-03  本文已影响0人  iMikasa_

在利用JavaScript开发的时候,经常遇见因为this引发的问题,很容易给我们程序员高兴死,所以我要记录一篇有关this的文章,好让朕遇见的时候不至于高兴死。

我们先了解一下this的使用场景呗...

我们直接使用this看看会返回个啥。

this    //返回Window
this === window     //返回true

浏览器环境之中this就是代表当前的全局对象Window

this     //返回global
this === global       //返回true

Node环境之中this代表当前的全局对象global,利用Node运行js脚本文件时this代表的是空对象

根据我的理解,不论这个this出现在什么场合,他都总是返回一个对象

写个简单的例子,这谁都会

function f() {
  return '姓名:'+ this.name;
}

var A = {
  name: '张三',
  describe: f
};

var B = {
  name: '李四',
  describe: f
};

A.describe() // "姓名:张三"
B.describe() // "姓名:李四"

很好发现,这是哪个实例调用的,那个this就是那个实例。
我们现在再直接调用f()函数,函数内部会去找全局对象中挂载的name属性,如果没有就返回undefined.

接着我们测试个好玩的,在回调函数内测试这个this。

let obj = {};
obj.f = function(){
       console.log(this === obj); 
}
document.querySelector("h1").addEventListener("click",obj.f)

这样乍一看,调用函数的是obj对象,这个函数应该返回的是个true,但是我们点击发现,他返回的是false。原因是现在的this指向的并不是obj对象了,而是页面上的Dom对象。

我的解决办法是,如下

let obj = {};
obj.f = function(){
      console.log(this === obj);
}
let myfunc = obj.f.bind(obj)
document.querySelector("h1").addEventListener("click",myfunc)  

这样返回的就是true了,代码中用到了bind()函数了,这个以后再介绍吧。
大意就是给这个f函数绑定this对象就是obj...

其他我想嗦的东西

刚才我们测试来着,如果直接调用函数体内打印this的函数,他会返回全局对象,global Window,但是当我们给我们的js代码设置为严格模式'use strict'后,这个this就是undefined,如果函数内是如this.啥啥啥的就会报错的

以及箭头函数没有this

上一篇 下一篇

猜你喜欢

热点阅读