浅谈一下this关键字

简介: 浅谈一下this关键字

思维导图

f9508e34160643f984c745bac319ec2e_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


为什么要使用this

当时是它有好处呀,方便,毕竟它喜欢瞎几把乱指,其实人家this并没有好。是个规规矩矩的乖孩子。


为什么使用: this 提供了一种更优雅的方式来隐式“传递”一个对象引用。可以简化开发者的工作,当时前提是你彻底搞懂它的机制。


this 关键字是 JavaScript 中最复杂的机制之一。它是一个很特别的关键字,被自动定义在 所有函数的作用域中。

function getName(obj) {
    console.log(obj.name);
}
function getName1() {
    console.log(this.name);
}
var obj = {
    name:'铁憨憨'
}
getName(obj); // 铁憨憨
getName1.call(obj); // 铁憨憨
复制代码


直接传递对象作为函数的参数,和使用this指向obj对象效果是一样的。

当我们书写更复杂跟 * 山一样的代码,this就更加显得重要了。


this误解

this 指向函数自身 ?

先说明这是错误的。不信?下面来个例子

var where = '跑路了'
function fn() {
    console.log(this.where); // 跑路了
    console.log(fn.where); // "无名氏"
}
fn.where = '无名氏'
fn()
复制代码


所以this 指向函数自身是错误的哦~


this 指向函数的作用域

在某种情况下它是正确的,但是在其他情况下它却是错误的。这只是某一种情况而已。

注意: this 在任何情况下都不指向函数的词法作用域

function foo() {
    var a = 2;
    this.bar();
}
function bar() {
    console.log(this.a);
}
foo(); // ReferenceError: a is not defined
复制代码


调用 bar() 最自然的方法是省略前面的 this,直接使用词法引用标识符,不能使用 this 来引用一 个词法作用域内部的东西。


this到底是什么?

当一个函数被调用时,会创建一个活动记录(有时候也称为执行上下文)。这个记录会包 含函数在哪里被调用(调用栈)、函数的调用方法、传入的参数等信息。this 就是记录的 其中一个属性,会在函数执行的过程中用到。

其实this指向关键是看函数是如何调用的,箭头函数除外,箭头函数是看源代码写哪了。下篇文写~



目录
相关文章
|
Java
属性与this关键字
属性与this关键字
50 0
|
Java
Java面向对象中 this关键字的详解
Java面向对象中 this关键字的详解
64 0
|
Java 编译器
构造函数中为什么要用this关键字?
构造函数中为什么要用this关键字?
75 0
|
存储 设计模式 安全
如何理解子类对象赋值给父类(深入理解动态绑定、静态绑定)
如何理解子类对象赋值给父类(深入理解动态绑定、静态绑定)
如何理解子类对象赋值给父类(深入理解动态绑定、静态绑定)
|
编译器 C++
C++类和对象【2】—— 对象特性(构造函数、析构函数、拷贝构造函数、深浅拷贝、初始化列表、类对象作为成员类、静态成员变量及静态成员函数等。)
C++类和对象【2】—— 对象特性(构造函数、析构函数、拷贝构造函数、深浅拷贝、初始化列表、类对象作为成员类、静态成员变量及静态成员函数等。)
157 0
C++类和对象【2】—— 对象特性(构造函数、析构函数、拷贝构造函数、深浅拷贝、初始化列表、类对象作为成员类、静态成员变量及静态成员函数等。)
|
JavaScript
6、this关键字
6、this关键字
87 0
6、this关键字
|
存储 编译器 C语言
【三、类中的静态成员】静态成员变量与静态成员函数(static关键字、this指针)
【三、类中的静态成员】静态成员变量与静态成员函数(static关键字、this指针)
154 0
|
Android开发
构造函数与初始化块
构造函数与初始化块
155 0