JavaScript this

JavaScript this

当前执行代码的环境对象,在非严格模式下,总是指向一个对象,在严格模式下可以是任意值。(MDN)

 

this 指向的是当前的代码上下文环境,所以不同情况下的 this 指向也不同。

 

1. 全局下的 this

在全局环境下,this 指向全局对象。

 

全局对象和宿主环境相关,在浏览器下,全局对象就是 window 对象,在 node.js 中,全局对象是 global 对象。

 

window === this; // 输出:true

代码块

预览

复制

图片描述

 

新的标准提供了 globalThis 关键字来获取全局对象,这样就能抹平宿主的差异来操作处理全局对象了。

 

2. 函数中的 this

函数在不同情况下,其 this 的指向也不同。

 

2.1 对象下的方法

方法也是一个函数,如果通过对象调用一个函数,函数的 this 就会指向这个对象。

 

var person = {

  age: 14,

  name: '鸽子王',

  skill: '放鸽子',

  say: function() {

    console.log('来一段自我介绍:');

    console.log('我是' + this.name);

    console.log('我今年' + this.age + '岁');

    console.log('我最擅长' + this.skill);

  },

};

 

person.say();

代码块

预览

复制

图片描述

 

say函数作为对象下的方法,在被调用后,其 this 指向的是他所在的对象,在这里就是 person 对象。

 

2.2 原型链上方法的 this

原型链上的方法,this 指向的也是调用该方法的对象。

 

var __proto__ = {

  sum: function() {

    return this.number1 + this.number2;

  },

};

 

var object = Object.create(__proto__);

 

object.number1 = 1;

object.number2 = 2;

 

console.log(

  object.sum(),

); // 输出:3

代码块

预览

复制

图片描述

 

Object.create 做就就是将参数作为原型,创建一个对象。

 

所以 object 的第一原型就是 __proto__ 对象。

 

number1 和 number2 都是 obj

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值