call/apply
作用:改变this指向
区别:后面传的参数形式不同
function Person(name, age) {
this.name = name; //this原本是window
this.age = age;
}
var person = new Person('deng', 100); //this指向Person
var obj = {};
Person.call(obj, 'cheng', 300); //this指向obj,后面是实参
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
function Student(name, age, sex, tel, grade) {
Person.call(this, name, age, sex);
this.tel = tel;
this.grade = grade;
}
var student = new Student('sunny', 123, 'male', 139, 2017);
- call 需要把实参按照形参的个数传进去
- apply 需要传一个argument实参列表
Person.call(this, name, age, sex);
相当于Person.apply(this, [name, age, sex]);
bar.apply(null, arguments);
相当于bar(arguments)
.