call(), apply(), bind() - javascript

bind()
会绑定一个对象,让其成为this。最后返回一个新的函数拷贝。

function currying
creating a copy of a function but with some preset parameters.
如果额外传递参数给bind(),那个这个参数就会成为permanent的值,再使用这个新的函数拷贝时,就不用再传那个参数了,因为已经绑定好了。

cal()
会直接传递一个对象成为this, 然后执行方程。

apply()
和call的区别在于,传递参数时,用的是一个数组。

var person = {
    firstname: 'John',
    lastname: 'Doe',
    getFullName: function() {
        
        var fullname = this.firstname + ' ' + this.lastname;
        return fullname;
        
    }
}

var logName = function(lang1, lang2) {

    console.log('Logged: ' + this.getFullName());
    console.log('Arguments: ' + lang1 + ' ' + lang2);
    console.log('-----------');
    
}

var logPersonName = logName.bind(person);
logPersonName('en');

logName.call(person, 'en', 'es');
logName.apply(person, ['en', 'es']);

(function(lang1, lang2) {

    console.log('Logged: ' + this.getFullName());
    console.log('Arguments: ' + lang1 + ' ' + lang2);
    console.log('-----------');
    
}).apply(person, ['es', 'en']);

// function borrowing
var person2 = {
    firstname: 'Jane',
    lastname: 'Doe'
}

console.log(person.getFullName.apply(person2));

// function currying
function multiply(a, b) {
    return a*b;   
}

var multipleByTwo = multiply.bind(this, 2);
console.log(multipleByTwo(4));

var multipleByThree = multiply.bind(this, 3);
console.log(multipleByThree(4));

你可能感兴趣的:(call(), apply(), bind() - javascript)