JS中的this学习笔记

91 阅读1分钟

一、为什么要是使用this

this提供“隐式”传递一个对象引用,简洁易复用

二、this是什么

this所在函数中被使用,一般情况下this是指向所在函数的对象

三、this应用场景

1、this所在函数为对象的一个键值时,this指向该对象

2、this所在函数不属于对象的键值时,调用函数时,this指向window

3、构造函数中的this指向new出来的这个对象

4、函数应用apply、call和bind方法,可以改变this指向这三个方法指定的对象

四、apply、call和bind改变this指向

1、Funtion.prototype.apply 和 Function.prototype.call 方法用法基本一致

apply 传入两个参数,第一个是this指向对象,第二个是函数的形参(数组格式)

call 传入n个参数,第一个是this指向对象,第二个以后都是函数形参

let obj = {
    number : 0,
};
//计算形参的总和
let sum = function(){
    let sum = this.number;//sum = 0
    console.log(arguments);//输出一个数组
    for(let i = 0 ; i < arguments.length ; i++ ){
        sum += arguments[i]
    }
    return sum
}
console.log(sum.apply(obj , [1 , 2 , 3]));
console.log(sum.call(obj , 1 , 2 , 3));

2、Function.prototype.bind 传入n个参数,同call一样的传参方式

let obj = {
    number : 0,
};
//计算形参的总和
let sum = function(){
    let sum = this.number;//sum = 0
    console.log(arguments);//输出一个数组
    for(let i = 0 ; i < arguments.length ; i++ ){
        sum += arguments[i]
    }
    return sum
}.bind(obj , 1 , 2 , 3));

注意: 箭头函数不绑定Arguments对象 箭头函数只能用于非方法函数 箭头函数不能作为构造函数 箭头函数没有property属性