В чем разница между вызовом метода функции(), apply(), bind()?
Значение call(), apply(), bind()
Изменить контекст при выполнении функции, то есть изменить указатель this;
грамматика:
Начнем с простого примера:
/* // 所有在全局的函数,里边this的指向全是window
function demo(){
console.log(this); //this指向window
}
demo(); */
- [ 1. Метод call() вызывает функцию с указанным значением this и одним или несколькими параметрами, указанными отдельно. ]
//this 永远指向最后调用它的那个对象
var obj1={
name:"小明",
fn1:function(val1,val2) {
console.log(this.name,val1,val2);
}
}
var obj2={
name:"小红",
fn2:function() {
console.log(this.name);
}
}
this.obj1.fn1.call(obj2,111,222); //this指向改变为obj2
- [ 2. Метод apply() использует указанное значение this и отдельно заданноемассив из одного или нескольких параметровдля вызова функции. ]
//this 永远指向最后调用它的那个对象
var obj1={
name:"小明",
fn1:function(a,b) {
console.log(this.name,a,b);
}
}
var obj2={
name:"小红",
fn2:function() {
console.log(this.name);
}
}
this.obj1.fn1.apply(obj2,[123,456]); //this指向改变为obj2
- [ 3. Метод bind() также изменяет указатель this, но возвращает новую функцию, которую нужно вызывать снова. ]
//this 永远指向最后调用它的那个对象
var obj1={
name:"小明",
fn1:function(val) {
console.log(this.name);
}
}
var obj2={
name:"小红",
fn2:function() {
console.log(this.name);
}
}
var newfn3=obj1.fn1.bind(obj2); //this指向改变为obj2
newfn3();