this的指向问题、bind/call/apply改变this指向
this的指向问题
全局作用域下的this指向
无论是否是严格模式,全局作用域下的this始终指向window
函数内部的this
严格模式下:
function test() {
  'use strict'
  console.log(this)
}
test(); // undefined
window.test(); // window
非严格模式下:
function test() {
  console.log(this)
}
test(); // window
window.test(); // window
严格模式下,对函数的调用必须严格地写出被调用函数的对象,不可以省略。非严格模式,可以省略。
对象内部方法的this
对象内部方法的this指向调用这些方法的对象,也就是谁调用就指向谁
let obj = {
  test: function() {
    console.log(this);
  }
}
obj.test(); // obj
箭头函数中的this
箭头函数没有this,它会绑定最近的非箭头函数作用域中的this。从父级作用域一直往上找,直到找到this的指向为止。
let obj = {
  test: () => {
    console.log(this);
  }
}
obj.test(); // window
如果test是普通函数,那么它的this应该绑定的是obj。
然而test现在是箭头函数,因此它的this要找到obj的父级作用域,也就是window,因此this指向window。
构造函数中的this
构造函数中的this是指向实例的。
function Person(name, age, sex) {
  this.name = name;
  this.age = age;
  this.sex = sex;
}
let p = new Person("cxk", 20, 'girl');
console.log(p.name); // cxk
console.log(p.age); // 20
console.log(p.sex); // girl
bind/call/apply 改变this指向
三个方法的区别:
他们都是用来改变相关函数的this指向的。
但是call/apply是直接进行相关函数的调用;bind不是执行相关函数,而是返回一个新的函数,这个新的函数已经自动绑定了新的this指向。
var user = {
  test: function() {
    console.log(`My name is ${this.name}, ${this.age} years old.`);
  },
  test2: function(from, to) {
    console.log(`My name is ${this.name}, ${this.age} years old. I'm from ${from}, Iwana go to ${to}`);
  }
}
var db = {
  name: 'CXK',
  age: 18
}
user.test.call(db);
user.test.apply(db);
user.test.bind(db)();
// My name is CXK, 18 years old.
user.test2.call(db, 'beijing', 'shanghai');
user.test2.apply(db, ['beijing', 'shanghai']);
user.test2.bind(db, 'beijing', 'shanghai')();
// My name is CXK, 18 years old. I'm from beijing, I wanna go to shanghai.
this的指向问题、bind/call/apply改变this指向的更多相关文章
- call()与apply() 改变this指向
		p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Consolas; color: #a5b2b9 } span.Apple-tab-span ... 
- js中改变this指向的call、apply、bind 方法使用
		前言: 由于js 中this的指向受函数运行环境的影响,指向经常改变,使得开发变得困难和模糊,所以在封装sdk,写一些复杂函数的时候经常会用到this 指向绑定,以避免出现不必要的问题,call.ap ... 
- 改变this指向的三种方法
		call.apply.bind三者为改变this指向的方法. 共同点:第一个参数都为改变this的指针.若第一参数为null/undefined,this默认指向window call(无数个参数) ... 
- 深入理解this和call、bind、apply对this的影响及用法
		首先看一道网易的面试题: var a = { a:"haha", getA:function(){ console.log(this.a); } } var b = { a:&qu ... 
- 改变函数中的 this 指向——神奇的call,apply和bind及其应用
		在JavaScript 中,call.apply 和 bind 是 Function 对象自带的三个方法,这三个方法的主要作用是改变函数中的 this 指向,从而可以达到`接花移木`的效果.本文将对这 ... 
- JavaScript 中call()、 apply()、 bind()改变this指向理解
		最近开发的过程中遇到了this指向问题,首先想到的是call().apply().bind()三个方法,有些时候这三个方法确实是十分重要,现在我们就把他们的使用方法及异同点讲解一下. 1.每个函数都包 ... 
- js 改变this指向的三种方法 bind call apply
		先了解下bind call apply 的注意点 bind 需要手动调用 第一个参数 this 要指向的对象,后面是 散列的参数 call 不需要手动调用 第一个参数 this 要指向的对象,后面是 ... 
- 有关call和apply、bind的区别及this指向问题
		call和apply都是解决this指向问题的方法,唯一的区别是apply传入的参数除了其指定的this对象之外的参数是一个数组,数组中的值会作为参数按照顺序传入到this指定的对象中. bind是解 ... 
- js修改函数内部的this指向(bind,call,apply)
		js修改函数内部的this指向 在调用函数的时候偶尔在函数内部会使用到this,在使用this的时候发现并不是我们想要指向的对象.可以通过bind,call,apply来修改函数内部的this指向. ... 
随机推荐
- 论文解读(AGC)《Attributed Graph Clustering via Adaptive Graph Convolution》
			论文信息 论文标题:Attributed Graph Clustering via Adaptive Graph Convolution论文作者:Xiaotong Zhang, Han Liu, Qi ... 
- SQL SERVER 算法面试题,自己再插入数据时,本想一次性复制10条数据,结果变成了1024条。产生一个算法bug,最后记录一下
- Electron学习(三)之简单交互操作
			写在前面 最近一直在做批量测试工具的开发,打包的exe,执行也是一个黑乎乎的dos窗口,真的丑死了,总感觉没个界面,体验不好,所以就想尝试写桌面应用程序. 在技术选型时,Java窗体实现使用JavaF ... 
- 【cartogarpher_ros】一: ros系统下的快速安装
			Cartographer是一个跨多个平台和传感器配置提供 2D 和 3D实时同步定位和映射 ( SLAM ) 的系统. 使用Cartographer有Ros集成环境和无Ros环境,对于新手快速入门,推 ... 
- labview从入门到出家1--第一个加法程序
			概述: Labview在众多编程语言中排名靠后,显然在当今互联网,物联网时代并非主流语言.但是俗话说行行 出状元,即便不是立身于某个主流的领域,用好了依旧可以独领风骚,而且Labview对于硬件出身的 ... 
- 静态static关键字修饰成员方法和静态static的内存图
			当 static 修饰成员方法时,该方法称为类方法 .静态方法在声明中有 static ,建议使用类名来调用,而不需要 创建类的对象.调用方式非常简单 ~类方法:使用 static关键字修饰的成员方法 ... 
- 简记清空C语言输入残留内容
			为了在命令行程序中实现和用户的交互,我们编写的程序的运行过程中往往涉及到对标准输入/输出流的多次读写. 在C语言中接受用户输入这一块,有着一个老生常谈的问题:"怎么样及时清空输入流中的数据? ... 
- vivo官网APP全机型UI适配方案
			vivo 互联网客户端团队- Xu Jie 日益新增的机型,给开发人员带来了很多的适配工作.代码能不能统一.apk能不能统一.物料如何选取.样式怎么展示等等都是困扰开发人员的问题,本方案就是介绍不同机 ... 
- P2183 [国家集训队]【一本通提高组合数学】礼物
			[国家集训队]礼物 题目背景 一年一度的圣诞节快要来到了.每年的圣诞节小 E 都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小 E 心目中的重要性不同,在小 E 心中分量越重的人,收到的礼物会 ... 
- CF222C Reducing Fractions
			题目大意: 给出两个集合,第一个集合数的乘积是分子,第二个集合的数的乘积是分母,要求够造一个同样的集合,但是得到的分数是最简分数. 分析: 寻找思路并不复杂,对两个集合的每个数进行质因数分解,然后统计 ... 
