js call apply bind简单的理解
相同点:JS中call与apply方法可以改变某个函数执行的上下文环境,也就是可以改变函数内this的指向。
区别:call与apply方法的参数中,第一个参数都是指定的上下文环境或者指定的对象,而call()方法传入的参数都是不定的,而apply()方法传入的参数都是放入数组中才能传入的。
bind()方法与call()和apply()方法很相似,都是可以改变函数内this的指向。
MDN的解释是:bind()方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入bind()方法的第一个参数作为this,传入bind()方法的第二个以及以后的参数加上绑定函数运行时本省的参数按照顺序作为原函数的参数来调用原函数。
如果只是想改变上下文环境,而非执行该函数,则使用bind()方法,call()或apply()方法会立即执行该函数。
Demo:
(function(){ var obj = {
id: 1,
name: 'Object',
show: function(){
console.log('编号为:%d,姓名为:%s', this.id, this.name);
}
}; obj.show();//编号为:1,姓名为:Object var lili = {
id: 2,
name: 'LiLi'
};
obj.show.call(lili);//编号为:2,姓名为:LiLi
obj.show.apply(lili);//编号为:2,姓名为:LiLi
obj.show.bind(lili)();//编号为:2,姓名为:LiLi })();
应用:
(function(){ var arr1 = [1, 3, 5, 7, 9];
//最大值:
console.log(Math.max.apply(null, arr1));//
//最小值:
console.log(Math.min.apply(null, arr1));//
var arr2 = ['a', 'b', 'c', 'd']; //数组追加
Array.prototype.push.apply(arr1, arr2);
console.log(arr1);// [1, 3, 5, 7, 9, "a", "b", "c", "d"] })();
js call apply bind简单的理解的更多相关文章
- 学习前端的菜鸡对JS的call,apply,bind的通俗易懂理解
call,apply,bind 在JavaScript中,call.apply和bind是Function对象自带的三个方法,都是为了改变函数体内部 this 的指向. a ...
- js 关于apply和call的理解使用
关于call和apply,以前也思考良久,很多时候都以为记住了,但是,我太难了.今天我特地写下笔记,希望可以完全掌握这个东西,也希望可以帮助到任何想对学习这个东西的同学. 一.apply函数定义与理解 ...
- 前端基础:call,apply,bind的的理解
背景 前两天在做小程序的需求的时候用到bind的时候才想起自己对这三的东西的了解比较浅薄,这个时候用的时候就有点怕.时候还是要好好学习下,理解下怎么玩. 正文 先说call 和 apply吧:ECMA ...
- 关于JS中apply方法的基本理解
最近研究OpenLayers源码时,发现其中使用了比较多的apply方法,对其也是很不明白.于是上网经过多方面了解以及自己细细体会后,终于算是基本明白是其干什么的了,这里分享下.apply方法的造型是 ...
- js call().apply().bind()的用法
function Person(age) { this.age = age; } Person.prototype.sayHi = function (x, y) { console.log((x + ...
- js call apply bind
call.apply.bindcat.call(dog, a, b) == cat.apply(dog, [a, b]) == (cat.bind(dog, a, b))() 1.作用 改变函数内的t ...
- 理解 backbone.js 中的 bind 和 bindAll 方法,关于如何在方法中指定其中的 this,包含apply方法的说明[转载]
转载自:http://gxxsite.com/content/view/id/132.html 在backbone.js的学习过程中,被bind和bindAll弄得有点晕,这里包括underscore ...
- 理解 JavaScript call()/apply()/bind()
理解 JavaScript this 文章中已经比较全面的分析了 this 在 JavaScript 中的指向问题,用一句话来总结就是:this 的指向一定是在执行时决定的,指向被调用函数的对象.当然 ...
- 前端面试 js 你有多了解call,apply,bind?
函数原型链中的 apply,call 和 bind 方法是 JavaScript 中相当重要的概念,与 this 关键字密切相关,相当一部分人对它们的理解还是比较浅显,所谓js基础扎实,绕不开这些基础 ...
随机推荐
- C# 语言如何获取json格式的数据,不用javascript用c#实现。。。
{'state' : 1,'data':{'list':[{'id': 123, 'name': '诸葛天邪','level': 10,'country': 1,}]}} 比如我要获取里面的 id 该 ...
- c#枚举自定义,用于数据绑定。
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Enum)] public ...
- eclipse juno版本中没用 ant
下载了谷歌提供的Android集成开发工具ADT,里面封装了Eclipse,但是很奇怪的是竟然没有Ant插件在里面 标准的Eclipse一般都是内置集成了Ant的. 然后到eclipse的plugin ...
- 看部电影,透透彻彻理解IoC(你没有理由再迷惑!)
引述:IoC(控制反转:Inverse of Control)是Spring容器的内核,AOP.声明式事务等功能在此基础上开花结果.但是IoC这个重要的概念却比较晦涩隐讳,不容易让人望文生义,这不能不 ...
- PHP流程控制语句下
ok,继续搞. while循环: while(expr){ 程序块: } 条件expr成立执行程序块,否则结束. do while循环:do while循环比while循环要多循环一次,它要先执行程序 ...
- Oracle 10g 数据文件的第一个数据块结构
一.数据文件的第一个数据块结构kcvfh BBED> set file 1 FILE# 1 BBED> set block 1 BLOCK# 1 --查看第一个数据块的整体结构 BBED& ...
- openerp 常见问题 OpenERP在哪储存附件?(转载)
OpenERP在哪储存附件? 原文地址:http://cn.openerp.cn/where_to_store_attachement_in_openerp_7/ 我们知道对OpenERP中的每个内部 ...
- php集成开发环境IDE
ZendStudio EclipsePHP PhpStorm NetBeans
- Spiral Matrix II
Spiral Matrix II Given an integer n, generate a square matrix filled with elements from 1 to n2 in s ...
- python re 正则表达式[转]
01.#!/usr/bin/env python 02.# -*- coding: utf-8 -*- 03.import re 04. 05.def regex(): 06. str = 'abcd ...