浅析js中的this

更新日期: 2019-08-01阅读: 1.6k标签: this

很多人可能会有疑问,this到底是什么?为什么this的值变化多端?首先我们来概括下this.

this是一个对象,一般存在于函数中,表示当前函数的执行上下文;

值得一提的是,当函数在执行后,this才有绑定的对象,函数未执行时,this没有内容,接下来我们看看在不同场景下的this的指向


1.函数默认执行 :此时this指向Window

function fn(){
        console.log(this)    //Window
    };
fn();
//在严格模式开启后,this的指向又有所不同

严格模式下 : this指向undefined

function fn() {
	"use strict"
	console.log(this) //undefined
};
fn();   
//2.函数的隐式执行 : this指向函数的直接执行对象
function fn() {
	console.log(this);    
};
var a = 10;
var obj = {
	a: 20,
	b: fn
};
obj.b(); //this指向obj
var obj2 = {
	a: 30,
	b: obj.b
};
obj2.b(); //this指向obj2
var obj3 = {
	a: 40,
	b: obj2        
};
obj3.b.b();//obj3.b.b等价于obj2.b this指向obj2

但当函数作为参数传到另一个函数的变量时, 发生隐式丢失,this指向Window

function fn(){
            console.log(this)       //Window
        };
        var obj = {
            a:20,
            b:fn
        };
 setTimeout(obj.b, 1000);
        function setTimeout(cb,t){
            cb();              //obj.b作为参数传给cb,而cb前没对象,相当于默认方式执行fn() 
  };


3.函数的显式执行 : this指向指定对象

我们可以通过函数的bind、call、apply方式指定this的对象,还可以用来修复上文中的隐式丢失

var obj = {
    name: "obj",
    show: function () {
        console.log(this.name)
    }
}
obj.show();                     //obj

var obj2 = {
    name: "obj2"
};
obj.show.bind(obj2)();          //obj2

var name = "蜡笔笑嘻嘻";         
obj.show.bind(window)();     //Window


4.构造函数执行(通过new执行)

构造函数中的this 会指向创建出来的实例对象

function Person() {
        this.name = 'zhar';
}
var p = new Person();
console.log(p.name);        //zhar


链接: https://www.fly63.com/article/detial/5072

解读Javascript中的this机制,别再为了 this 发愁了

JavaScript中有很多令人困惑的地方,或者叫做机制。但是,就是这些东西让JavaScript显得那么美好而与众不同。比方说函数也是对象、闭包、原型链继承等等,而这其中就包括颇让人费解的this机制。

js中this的详细解释,JavaScript中this绑定规则【你不知道的JavaScript】

this的绑定过程之前的调用栈 和 调用位置,this绑定规则:1、默认模式,2、隐式绑定,3、显式绑定,4、new绑定

JavaScript中this的运行机制及爬坑指南

在 JavaScript 中,this 这个特殊的变量是相对比较复杂的,因为 this 不仅仅用在面向对象环境中,在其他任何地方也是可用的。 本篇博文中会解释 this 是如何工作的以及使用中可能导致问题的地方,最后奉上最佳实践。

JS中this的指向问题(全)

this关键字在js中的指向问题不管是工作还是面试中都会经常遇到,所以在此对它进行一下总结:全局作用域中、闭包中指window、函数调用模式:谁调用就指谁、构造函数中,this指实例对象、apply/call改变this的指向、bind改变this指向等

彻底淘汰并消除JavaScript中的this

如果这很难明白,为什么我们不停止使用它呢?认真的思考一下?如果你读过 将90%的垃圾扔进垃圾桶后,我如何重新发现对JavaScript的爱, 当我说扔掉它时,你不会感到惊讶,this被丢弃了

JavaScript this常见指向问题

this的用法:直接在函数中使用 谁调用这个函数this就指向谁 ,对象中使用, 一般情况下指向该对象 ,在构造函数中使用

JavaScript函数中this的四种绑定策略

this的四种绑定策略:默认绑定、隐式绑定、显示绑定、new绑定。首先要明确的是一般情况下,this不是函数被定义时绑定,而是函数被调用时被绑定 ,那么函数中的this有四种绑定方式:

改变this的指向

this是Javascript语言的一个关键字。它代表函数运行时,自动生成的一个内部对象.this永远指向函数的调用者。随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。

js手写实现apply,call,bind

apply和call的区别就是传的参数形式不一样。call是一个一个的传,apply可以将参数以数组的形式传进去。而bind是传入第二个和后面的参数,且绑定this,返回一个转化后的函数。

this指向问题的经典场景

以函数形式调用,this指向window;以方法形式调用,this指向调用方法的那个对象;构造函数调用,this指向实例的对象;使用window对象的方法使,指向window;多重场景改变this指向

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!