javascript的call和apply区别

call/apply
作用是改变this指向,区别后面传的参数形式不同

 

看一下例子

function Person(name, age) {
  // this = obj
  this.name = name
  this.age = age
}
var obj = {
}
Person.call(obj, 'lyj', 18)  //函数执行会默认调用call, 比如Person.call()
console.log(obj)             //{age: 18, name: 'lyj'} call第一个参数,使this指向obj, 第二个参数起为函数传的参数

再看以下例子

function Person(name, age, sex) {
  this.name = name
  this.age = age
  this.sex = sex
} 
function Student(name, age, sex, tel, score) {
  Person.call(this, name, age, sex)  //使Person里面的this指向Student的this, 借用Person的功能制造出Student的功能
  // this.name = name
  // this.age = age
  // this.sex = sex
  this.tel = tel
  this.score = score
}
var student = new Student('lyj', 18, '男', 662130, 90)
console.log(student)
//改变this指向理解为,自身没有的功能借助别的构造函数来实现自身的功能

//apply与call类似,传参形式不同
var obj = {}
Person.call(obj, 'lyj', 18, '男')  //call, 第二个参数起可以传多个参数,实参个数等于形参个数
Person.apply(obj, ['lyj', 18, '男'])  //apply, 第二个参数为实参列表arguments, 而且只能一个参数 

 

end !!!

posted @ 2020-10-14 16:18  杰哥之家  阅读(255)  评论(0编辑  收藏  举报