bind,apply,call的区别

在Javascript中,bind, apply, call方法都可以显式绑定上下文this,这三者有何不同呢?

bind只绑定this不马上执行

var person = {
    firstname: ‘darren‘,
    lastname: ‘ji‘,
    getFullName: function(){
        var fullname = this.firstname + ‘ ‘ + this.lastname;
        return fullname;
    }
};

//在浏览器中这里的this就是指向window
var logName = function(arg1, arg2){
    console.log(this.getFullName());
}

//bind只是设置了this的指向,本身并不能执行
var logPersonName = logName.bind(person);

//darren ji
logPersonName();

call不仅绑定this,还马上执行,并接受可变参数

var person = {
    firstname: ‘darren‘,
    lastname: ‘ji‘,
    getFullName: function(){
        var fullname = this.firstname + ‘ ‘ + this.lastname;
        return fullname;
    }
};

//在浏览器中这里的this就是指向window
var logName = function(arg1, arg2){
    console.log(this.getFullName());
    console.log(‘Arguments: ‘ + arg1 + ‘ ‘ + arg2);
}

//darren ji
//Arguments: en es
logName.call(person, ‘en‘,‘es‘);

apply不仅绑定this,也马上执行,并接受数组

var person = {
    firstname: ‘darren‘,
    lastname: ‘ji‘,
    getFullName: function(){
        var fullname = this.firstname + ‘ ‘ + this.lastname;
        return fullname;
    }
};

//在浏览器中这里的this就是指向window
var logName = function(arg1, arg2){
    console.log(this.getFullName());
    console.log(‘Arguments: ‘ + arg1 + ‘ ‘ + arg2);
}

//darren ji
//Arguments: en es
logName.apply(person, [‘en‘, ‘es‘]);
时间: 2024-11-17 14:24:30

bind,apply,call的区别的相关文章

call,apply,bind的用法以及区别

1.call.apply.bind的作用是改变函数运行时this的指向 方法调用模式: 当一个函数被保存为对象的一个方法时,如果调用表达式包含一个提取属性的动作,那么它就是被当做一个方法来调用,此时的this被绑定到这个对象. var a = 1 var obj1 = { a:2, fn:function(){ console.log(this.a) } } obj1.fn()//2 此时的this是指obj1这个对象,obj1.fn()实际上是obj1.fn.call(obj1),事实上谁调用

jQuery中的bind() live() delegate()之间区别分析

jQuery中的bind() live() delegate()之间区别分析 首先,你得要了解我们的事件冒泡(事件传播)的概念,我先看一张图 1.bind方式 $('a').bind('click',function (){ alert('click'); }) 解析:这种方式最简单,jq扫描文档找出所有的a,让将函数绑定到每个元素的click事件上 2.live方式 $('a').live('click',function (){ alert('click'); }) 解析:jq将函数绑定到$

Bind和Eval的区别详解

原文:Bind和Eval的区别详解 1.简单描述Eval和Bind的区别 绑定表达式 <%# Eval("字段名") %> <%# Bind("字段名") %> 区别 1.eval是只读数据,bind是可更新的. 2.当对次表达式操作时候,必须用Eval 如<%# Eval("字段名").ToString().Trim() %> 2.若GridView中绑定列里面 设置 内容格式 DataFormateStri

Jquery绑定事件(bind和live的区别)

Jquery中绑定事件有三种方法:以click事件为例 (1)target.click(function(){}); (2)target.bind("click",function(){}); (3)target.live("click",function(){}); 第一种方法很好理解,其实就和普通JS的用法差不多,只是少了一个on而已 第二.三种方法都是绑定事件,但是二者又有很大的不同,下面着重讲解一下,因为这个如果用到Jquery的框架的话是用的挺多的,尤其要

Jquery中bind和live的区别

Jquery中绑定事件有三种方法:以click事件为例 (1)target.click(function(){}); (2)target.bind("click",function(){}); (3)target.live("click",function(){}); 第一种方法很好理解,其实就和普通JS的用法差不多,只是少了一个on而已 第二.三种方法都是绑定事件,但是二者又有很大的不同,下面着重讲解一下,因为这个如果用到Jquery的框架的话是用的挺多的,尤其要

javascript 的bind/apply/call函数

javascript有三个使用频率非常高的内建函数:bind/apply/call.许多高级点的技巧都是基于这几个函数来实现的.这三个函数都用于改变函数的执行环境.从而达到代码复用的目的. 先来所说bind函数, bind,函数通常有两个用途: 1. 创建新函数,指定函数的this指针. name = 'global'; var obj1 = {name: 'foo'}; var showName = function() { console.log(this.name); } showName

bind 和 live的区别

Jquery中绑定事件有三种方法:以click事件为例 (1)target.click(function(){}); (2)target.bind("click",function(){}); (3)target.live("click",function(){}); 第一种方法很好理解,其实就和普通JS的用法差不多,只是少了一个on而已 第二.三种方法都是绑定事件,但是二者又有很大的不同,下面着重讲解一下,因为这个如果用到Jquery的框架的话是用的挺多的,尤其要

call,apply,bind的用法与区别

1.call/apply/bind方法的来源 首先,在使用call,apply,bind方法时,我们有必要知道这三个方法究竟是来自哪里?为什么可以使用的到这三个方法? call,apply,bind这三个方法其实都是继承自Function.prototype中的,属于实例方法. 1 console.log(Function.prototype.hasOwnProperty('call')) //true 2 console.log(Function.prototype.hasOwnPropert

js apply/call/caller/callee/bind使用方法与区别分析

一.call 方法 调用一个对象的一个方法,以另一个对象替换当前对象(其实就是更改对象的内部指针,即改变对象的this指向的内容). Js代码 call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 参数 thisObj 可选项.将被用作当前对象的对象. arg1, arg2, , argN 可选项.将被传递方法参数序列. 说明 call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对