Разница и использование call(), apply(), bind()?

внешний интерфейс опрос

В чем разница между вызовом метода функции(), 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();