(1). why?三个函数的存在意义是什么?
- 改变函数执行时的上下文(context).
- 改变函数运行时的this指向: a. 每个函数都包含两个非继承而来的方法:call()和apply().
(2). 区别:
- call、apply的区别: a. 接受参数的方式不一样.
- 其它: a. bind不立即执行. b. apply、call立即执行.
1. example:
var name = '小熊',age = 18;
var obj = {
name: '小狗',
objAge: this.age,
show: function () {
console.log(this.name, this.age)
}
}
obj.objAge; // 17
obj.show(); // 小狗 undefined
(1). call、apply、bind重定义this:
var name = '小小',age = 18;
var obj = {
name: '小小小',
objAge: this.age,
show: function () {
console.log(this.name, this.age)
}
}
var db = {
name: '小小小小',
age: 10
}
// 第一个参数是this指向的对象
obj.show.call(db); // 小小小小 10
obj.show.apply(db); // 小小小小 10
// bind返回的是一个新的函数,必须调用它才会被执行
obj.show.bind(db)(); // 小小小小 10