Failure is part of learning. we should never give up the struggle in life

call、bind、apply

区别

话不多说直接上代码

<script>
        // 建两个对象
        let p1 = {
            name: '张三',
            hobby: 'game',
            play: function (sex, age) {
                console.log('我是' + this.name + ',性别:' + sex + ',今年:' + age + ',喜欢:' + this.hobby);
            }
        }
        let p2 = {
            name: '坤坤',
            hobby: '唱跳rap篮球'
        }
        // 调用play方法
        p1.play('男', 19);// 我是张三性别男今年19喜欢game
        p1.play.call(p2, '男', 20);// 我是坤坤,性别:男,今年:20,喜欢:唱跳rap篮球
        p1.play.apply(p2, ['男', 20]);// 我是坤坤,性别:男,今年:20,喜欢:唱跳rap篮球
        p1.play.bind(p2, '男', 20)();// 我是坤坤,性别:男,今年:20,喜欢:唱跳rap篮球
        p1.play.bind(p2, '男', 20);//并没有调用函数

        // 上面可以观察到
        // 1.call和apply都是调用函数,并且改变函数内部this的指向
        // 2.call和apply传递参数的方式不同
        // 3.bind是返回对应函数,便于稍后调用,bind绑定this后不会立即调用
    </script>

发表评论

电子邮件地址不会被公开。 必填项已用*标注