请简述一下js中this

131 阅读1分钟

this是我们在开发中,最常见到的,刚开始学编程的时候,this给我看懵了,理解不了,this到底是干什么的,有什么作用

首先解释一下this是一个对象,在不同情况下this指向不同

对象调用时,this指向该对象
var obj = {    
    name:'kobe',    
    age: 41,    
    print:function(){        
        console.log(this)        
        console.log(this.name + '  ' + this.age)    
    }
}
obj.print()   //this指向该对象
直接调用的函数,this指向的是全局window对象
function print() {    
    console.log(this)
}
print()  //this指向的是window
通过new的方式,this永远指向新创建的对象
function person(name,age) {    
    this.name = name    
    this.age = age   
    console.log(this)
}
var p = new person('欧文',30)   //this指向新创建的对象person
箭头函数中的this
const obj1 = {    
    a:()=>{       
        console.log(this)    
    }
}
obj1.a()   //window

面试题 call( ) , apply( ) ,bind( )区别:

call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向

call() ,apply( )是立即调用函数

var obj = {
    username:"kobe"
}
function foo(data){    
    console.log(this,data)
}
// 传参形式
foo.call(obj,33)
//直接从第二个参数开始,依次传入
foo.apply(obj,[33])    //放在数组里传入
// bind特点:绑定完this不会立即调用当前的函数,而是将函数返回
var bar = foo.bind(obj)
console.log(bar)
foo.bind(obj)()

bind( ) 不会立即调用,而是将函数返回,因此后面需要加( )才能调用, bind()传参方式和call一样

分析 :为什么ES 5中要加入bind( ) 方法改变this的指向? 因为bind( ) 不会立即调用当前函数

bind( ) 通常使用在回调函数中

call,apply,bind在面试时通常会让手写代码,明天会总结一下这三个方法的手动实现,

路漫漫其修远兮~~~