关于js中this的指向详细总结、分析
this的指向详细剖析
function Person (color){
console.log(this)
this.color = color
this.getColor = function () {
console.log(this)
console.log(this.color)
}
this.setColor = function (color){
console.log(this)
this.color = color
}
}
当作为函数直接调用时, this => window
// 当作为函数,直接调用时
// this ===> 在非严格模式下,全局对象window; 严格模式下是undefiend
Person('red') // this => window
当作为构造函数时,this => 构造出的实例对象
// 当作为构造函数时
// this ===> 构造出的实例对象
var fitz = new Person('pink') // this => fitz
当作为对象的方法调用时,this => 调用方法的那个对象
// 当作为对象的方法调用时
// this ===> 调用方法的那个对象
fitz.getColor() // this => fitz
使用call、apply、bind方法时,this => 法中指定的对象(传入的第一个参数)
// 当使用call、apply、bind方法时
// this ==> 方法中指定的对象(传入的第一个参数)
var lx = {}
fitz.setColor.call(lx, 'blue') // this => lx
console.log(lx) // lx {color: "blue"}
函数调用时无任何调用前缀,this => window
// 函数调用时无任何调用前缀
// this ==> window
/*
原因: 执行func1相当于执行在函数外部执行func2()
*/
function func1 () {
function func2 () {
console.log(this)
}
func2() // 无任何调用前缀
}
func1() // this => window
箭头函数的this, this => 就是外层函数的this
准确的来说, 箭头函数自己没有this, 在箭头函数中的this会像作用域链一样像外层逐层查找, 箭头函数的this就是它外层函数的this
// 例子1
/*
这个例子中,箭头函数的this是外层函数test1的this
外层函数test1的this => window
所以console.log(this.msg) <=> console.log(window.msg)
*/
window.msg = '测试箭头函数的this'
function test1 () {
(() => {
console.log(this.msg)
})()
}
test1() // 测试箭头函数的this
// 例子2
function test2 () {
return () => {
console.log(this.name)
}
}
var obj = {
name: 'Fitz',
receiveFunc: test2()
}
var receiveFunc = test2.call(obj)
/*
执行完上述语句的状态是:
- 用call方法显示执行函数test2, 得到一个箭头函数
- 同时test2的this从window强制绑定后变成obj
*/
receiveFunc()
注意: 箭头函数的this一旦确定无法更改,但是可以通过改变外层函数的this然后曲线更改箭头函数的this
// 例子3
function test3 () {
return () => {
console.log(this)
}
}
var obj2 = {}
var receiveFunc2 = test3()
receiveFunc2.call(obj2)
关于js中this的指向详细总结、分析的更多相关文章
- 理解js中this的指向
学习自原文 http://www.cnblogs.com/pssp/p/5216085.html后的一点小结(原文作者总结的很棒^_^)! 关于js中this的指向,在函数定义的时候还无法 ...
- js中this的指向
在js中this的指向对于新手来说一定是个难题,但是如果你真正理解了的话,也就没什么问题啦,下面就来讲讲this吧. JS中,this的值取决于调用的模式(调用对象),而JS中共有4种调用模式: 1. ...
- JS中的this 指向问题
我发现在对JS的学习中有很多朋友对this的指向问题还是有很大的误区或者说只是大致了解,但是一旦遇到复杂的情况就会因为this指向问题而引发各种bug. 对于之前学习过c或者是Java的朋友来说可能这 ...
- 轻松了解JS中this的指向
JS中的this指向一直是个让人头疼的问题,想当初我学的是天昏地暗,查了好多资料,看的头都大了,跟他大战了那么多回合,终于把它搞定个七八分,其实往往都是我们复杂化了,现在就让大家轻松看懂this的指向 ...
- js中改变this指向的call、apply、bind 方法使用
前言: 由于js 中this的指向受函数运行环境的影响,指向经常改变,使得开发变得困难和模糊,所以在封装sdk,写一些复杂函数的时候经常会用到this 指向绑定,以避免出现不必要的问题,call.ap ...
- js中 this 的指向
js中 this的指向一共存在3种地方: 1.全局的this; 2.构造函数的this; 3.call/apply; 一.全局的this: function test(){ this.d = 3;// ...
- JS回调函数中的this指向(详细)
首先先说下正常的this指向问题 什么是this:自动引用正在调用当前方法的.前的对象. this指向的三种情况 1. obj.fun() fun中的this->obj,自动指向.前的对 ...
- 彻底理解js中this的指向,不必硬背。
首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然 ...
- 了解学习JS中this的指向
[转] 首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问 ...
随机推荐
- TYLER ADAMS BRADBERRY的私人投资分享
TYLER ADAMS BRADBERRY是星盟全球投资公司(USA International Covenant 公司编号:20091457685)的创始人.投资委员会发起了15支项目基金,通过多方 ...
- BGV上线两天价格超过880美金,下一个YFI已到来!
BGV自上线以来就备受币圈关注,众多投资者纷纷表示看好BGV.BGV也不负众望,在上线交易所第二天,价格就迎来了暴涨,最高价格为888.88美金,超越了当前以太坊的价值.而这也迎来了币圈众多投资者的一 ...
- linux下安装mysql8.0.x步骤
1.下载mysql mysql官网:https://dev.mysql.com/downloads/mysql/ 将下载的mysql上传打linux 2.解压并重命名 [root@rsyncClien ...
- Jmeter beanshell编程实例
1.引言 BeanShell是一种小型的,免费的,可嵌入的符合Java语法规范的源代码解释器,具有对象脚本语言特性. 在Jmeter实践中,由于BeanShell组件较高的自由度,通常被用来处理较为复 ...
- 工作之余第二篇(看源码自己实现ArrayList和LinkList)
先看源码: 首先看构造器,构造器有三种,一种直接给定初始长度的,如下代码 public ArrayList(int initialCapacity) { if (initialCapacity > ...
- Java基本概念:内部类
一.简介 描述: 很多时候我们创建类的对象的时候并不需要使用很多次,每次只使用一次,这个时候我们就可以使用内部类了. 内部类不是在一个java源文件中编写两个平行的类,而是在一个类的内部再定义另外一个 ...
- 第47天打卡学习(单例模式 深入了解CAS 原子引用 各种锁的理解)
18彻底玩转 单例模式 饿汉式 DCL懒汉模式 探究! 饿汉式 package com.kuang.single; //饿汉式单例 //单例模式重要思想是构造器私有 public class Hun ...
- Django-1.11中文文档-模型Models(一)
官方文档链接 模型是数据信息的唯一并明确的来源.它包含了我们储存的数据的基本字段和行为.通常,每个模型映射到一张数据库表. 基本概念: 每个模型都是django.db.models.Model的一个子 ...
- Python - Asyncio模块实现的生产消费者模型
[原创]转载请注明作者Johnthegreat和本文链接 在设计模式中,生产消费者模型占有非常重要的地位,这个模型在现实世界中也有很多有意思的对应场景,比如做包子的人和吃包子的人,当两者速度不匹配时, ...
- 后端程序员之路 24、Redis hiredis
Redishttps://redis.io/ Redis快速入门 - Redis教程http://www.yiibai.com/redis/redis_quick_guide.html wget ht ...