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
1
// 当没有参数时,默认将this指向 window 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 指向第一个参数:
1
// 将this指向 person1,由于person1中没有age属性,因此为 undefinedconsole.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需要用数组方式传递:
1
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.