javascript的call和apply區別
阿新 • • 發佈:2020-10-14
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, 第二個引數起為函式傳的引數
再看以下例子
functionPerson(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 !!!