this的指向 call apply bind

// 1. 普通的函数调用时

    function max () {
        this.x = 1;
        // this 指的是 global 对象,由于 global 对象是作为 window 对象的一部分实现的,因此 this 认为是 window 对象
        console.log(this)
    }
    max();

// 2. 作为对象的方法调用时

    var obj = {
        fullName: '张康',
        sayName: function() {
            // this 指的是 obj 对象
            console.log(this)
            return this.fullName;
        }
    };
    
    // 函数中的 this 指向的是函数的直接所有者。换句话来说,函数直接属于谁,函数中的 this 就指向谁。
    window.obj.sayName();

// 3. 作为构造函数调用时

    function Dog(dogName, dogAge) {
        // this 指的是新创建的实例,接下来会被自动返回到函数外部
        console.log(this)
        this.name = dogName;
        this.age = dogAge;
    }

    // 调用构造函数
    var dog1 = new Dog('哈士奇', 3);
    var dog2 = new Dog('泰迪', 2);

    console.log(dog1, dog2)
    
    function sayName(fullName, age) {
        console.log(this)
        console.log(fullName, age)
    }

    var obj1 = {
        name: '张康'
    };
// 使用 call() 方法调用 sayName() 函数,并将 sayName 函数中的 this 的指向改变成了 obj1
    sayName.call(obj1, '康博', 20)
    
    function sayName(fullName, age) {
        console.log(this)
        console.log(fullName, age)
    }

    var obj1 = {
        name: '张康'
    };
// 使用 apply() 方法调用 sayName() 函数,并将 sayName 函数中的 this 的指向改变成了 obj1
    sayName.apply(obj1, ['康博', 20])

    // apply() 与 call() 都是用来改变 this 的指向的,唯一的区别是传参的方式不一样。
    
    function sayName(fullName, age, xiaoming) {
        console.log(this)
        console.log(fullName, age, xiaoming)
    }

    var obj1 = {
        name: '张康'
    };
// bind() 方法并不会帮我调用 sayName() 函数,但是它会返回一个绑定好 this 以及参数的新函数
    // 可以用来绑定 this
    // 可以用来绑定形参的值
    var foo = sayName.bind(obj1, '康博', 20)

    foo('赵胤禛');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值