call和apply修改this指向

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        var name = 'Evan';
        var age = 20;
        var person = {
            name: 'Hillary',
            age: 19,
            sayIntroduce: function () {
                return "Hello, My name is " + this.name + " and I'm " + this.age + ' years old.'
            },
            sayHobby: function (val1, val2) {
                return "I'm " + this.name + ", I like " + val1 + " and " + val2 + ".";
            }
        }
        var person1 = {
            name: 'Coy'
        }
        console.log(person.sayIntroduce()); // Hello, My name is Hillary and I'm 19 years old.

        //当我们通过 call 和 apply 来this的指向时,不传任何参数,则默认为将this指向修改为 windows
        console.log(person.sayIntroduce.call()); // Hello, My name is Evan and I'm 20 years old.
        console.log(person.sayIntroduce.apply()); // Hello, My name is Evan and I'm 20 years old.

        // 有参数时,this 指向第一个参数:
        // 将this指向 person1,由于person1中没有age属性,因此为 undefined
        console.log(person.sayIntroduce.call(person1)); // Hello, My name is Coy and I'm undefined years old.
        console.log(person.sayIntroduce.apply(person1)); // Hello, My name is Coy and I'm undefined years old.

        // 当需要传递参数时,call可以直接写多个参数,apply需要用数组方式传递:
        console.log(person.sayHobby.call(person1, 'swimming', 'hiking')); // I'm Coy, I like swimming and hiking.
        console.log(person.sayHobby.apply(person1, ['swimming', 'hiking'])); // I'm Coy, I like swimming and hiking.

        // 下面是一个构造函数的例子:

        //构造函数应用
        function Grade(max, min, average) {
            this.max = max;
            this.min = min;
            this.average = average;
        }
        
        function Subject(subjectName,max, min, average) {
            Grade.call(this, max, min, average);
            this.subjectName = subjectName;
        }
        var math = new Subject('math', 99, 60, 80);
        console.log(math);
    </script>
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值