在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']);

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

  1. 箭头函数表达式和声名式函数表达式的区别以及 Function.prototype的bind, apply,call方法

    箭头函数不能用做构造函数 箭头函数没有arguments参数 箭头函数没有自己的this,是从作用域链上取this,是与箭头函数定义的位置有关的,与执行时谁调用无关,所以用call,apply,bin ...

  2. bind,call,applay的区别

    方法调用模式: 当一个函数被保存为对象的一个方法时,如果调用表达式包含一个提取属性的动作,那么它就是被当做一个方法来调用,此时的this被绑定到这个对象. var a = 1 var obj1 = { ...

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

    jQuery中的bind() live() delegate()之间区别分析 首先,你得要了解我们的事件冒泡(事件传播)的概念,我先看一张图 1.bind方式 $('a').bind('click', ...

  4. Jquery中bind和live的区别

    Jquery中绑定事件有三种方法:以click事件为例 (1)target.click(function(){}); (2)target.bind("click",function ...

  5. javascript中bind,apply,call的相同和不同之处

    javasctipt中bind,apply,call的相同点是: 1,都是用来改变this的指向; 2,都可以通过后续参数进行传参; 3,第一个参数都是指定this要指向的对象; 不同点: 1,调用方 ...

  6. javascript 的bind/apply/call性能

    javascript有两种使用频率非常高的三个内置的功能:bind/apply/call.许多技术是基于高点,这些功能实现.这三个功能被用来改变的功能运行环境.从而达到代码复用的目的. 先来所说bin ...

  7. Bind和Eval的区别详解

    原文:Bind和Eval的区别详解 1.简单描述Eval和Bind的区别 绑定表达式 <%# Eval("字段名") %> <%# Bind("字段名& ...

  8. [jQuery]on和bind事件绑定的区别

    on和bind事件绑定的区别 一个demo展示 <!DOCTYPE html> <html lang="zh"> <head> <titl ...

  9. .bind.apply() 解决 new 操作符不能用与 apply 或 call 同时使用

    背景: 小明想要用数组的形式为 Cls.func 传入多个参数,他想到了以下的写法: var a = new Cls.func.apply(null, [1, 2, 3]); 然而浏览器却报错Cls. ...

随机推荐

  1. Linux下select&poll&epoll的实现原理(一)【转】

    转自:http://www.cnblogs.com/lanyuliuyun/p/5011526.html 最近简单看了一把 linux-3.10.25 kernel中select/poll/epoll ...

  2. Project Euler Problem1

    Multiples of 3 and 5 Problem 1 If we list all the natural numbers below 10 that are multiples of 3 o ...

  3. tensorflow实现猫狗大战(分类算法)

    本次使用了tensorflow高级API,在规范化网络编程做出了尝试. 第一步:准备好需要的库 tensorflow-gpu  1.8.0 opencv-python     3.3.1 numpy ...

  4. Singleton单例对象的使用

    namespace www{ public abstract class SingletonManager<T> : ISingletonManager where T : class, ...

  5. mybatis SQL构造器

    org.apache.ibatis.jdbc.AbstractSQL<T> org.apache.ibatis.jdbc.AbstractSQL<T> 抽象泛型类,它主要用于解 ...

  6. v-if案例解析(element-ui form-item 结合 v-if 动态生成rule规则\表单元素,表单无法验证问题剖析 )

    fire 读在最前面: 1.此文章衔接Vue 虚拟Dom 及 部分生命周期初探,相关整体知识点请先阅读后再继续本文阅读 问:当v-if为true时,会重新渲染相关dom节点吗? <child v ...

  7. KnockoutJs学习笔记(十)

    event binding主要用于为指定的事件添加相应的处理函数,可以作用于任意事件,包括keypress.mouseover.mouseout等(也包括之前提到的click,根据后面的描述,clic ...

  8. Hive的安装和使用

    1.Hive1.1 在hadoop生态圈中属于数据仓库的角色.他能够管理hadoop中的数据,同时可以查询hadoop中的数据. 本质上讲,hive是一个SQL解析引擎.Hive可以把SQL查询转换为 ...

  9. 【Java】 大话数据结构(17) 排序算法(4) (归并排序)

    本文根据<大话数据结构>一书,实现了Java版的归并排序. 更多:数据结构与算法合集 基本概念 归并排序:将n个记录的序列看出n个有序的子序列,每个子序列长度为1,然后不断两两排序归并,直 ...

  10. js冲刺一下

    js中__proto__和prototype的区别和关系 1.对象有属性__proto__,指向该对象的构造函数的原型对象. 2.方法除了有属性__proto__,还有属性prototype,prot ...