在未经过绑定的this会指向Windows
Bind
使用Bind会return 一个function
let Dennis = { name: "Dennis", age: 22}function hello() { console.log(this) //指向Window console.log(this.age)}hello() //undefined
所以这边使用bind method绑定在指定的物件身上
let Dennis = { name: "Dennis", age: 22}function hello() { console.log(this) //指向Dennis console.log(this.age) //22}const Hello = hello.bind(Dennis)Hello()
Call
使用call 会直接执行,所以不需要变数接住function再执行
let Dennis = { name: "Dennis", age: 22}function hello() { console.log(this) //指向Dennis console.log(this.age) //22}hello.call(Dennis)
并且 call可以传入参数
let Dennis = { name: "Dennis", age: 22}function hello(parameter) { console.log(`My name is ${this.name} phonenumber is ${parameter}`)}hello.call(Dennis,) //My name is Dennis phonenumber is undefined
加入参数
let Dennis = { name: "Dennis", age: 22}function hello(parameter) { console.log(`My name is ${this.name} phonenumber is ${parameter}`)}hello.call(Dennis, "0900123123") //My name is Dennis phonenumber is 0900123123
Apply
apply跟call几乎一样,不同于传入参数型态,若是array使用apply,string等等使用call
let c = ["000000"]let Dennis = { name: "Dennis", age: 22}function hello(parameter) { console.log(`My name is ${this.name} phonenumber is ${parameter}`)}hello.apply(Dennis, c) //My name is Dennis phonenumber is 000000