凡尘:关于Apply、call、bind的详解

call方法:

语法:call(thisObj,‘‘,‘‘........)

定义:调用一个对象的一个方法,以另一个对象替换当前对象

说明:call方法可以用来代替另一个对象调用一个方法。call方法可将一个函数的对象上下文初始的上下文改变为由thisObj指定的新对象,如果没有提供thisObj参数,那么global对象被用做thisObj

apply方法:

语法:apply(thisObj,[‘‘,‘‘,‘‘....])

定义:应用某一个对象的方法,用另一个对象替换当前对象

如果argArray不是一个有效的数组或者不是arguments对象,那么将导致一个TypeError.如果没有提供argArray和thisObj任何一个参数,那么Global对象将用做thisObj,并且无法被传递任何参数

相同之处:

1、都是用来改变函数的this对象的指向
2、第一个参数都是this要指向的对象
3、都可以利用后续参数传参

不同之处:
1、call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数,因此后面需要加上()来进行调用才可以

案例一:bind与call、apply的区别

var a={
     name:‘阿姨请别把您闺女介绍给我‘,
     sex:‘男‘,
     age:‘24‘,
     say:function(){
          console.log(this.name+‘,今年‘+this.age+‘岁,性别‘+this.sex)
     }
}

var b={
     name:‘就要把闺女介绍给你‘,
     sex:‘女‘,
     age:‘18‘
}
a.say();//阿姨请别把您闺女介绍给我,今年24岁了,性别男

那么我们想一下如何让b用say的方法显示数据呢?

用call方法:a.say.call(b)

用apply方法:a.say.apply(b)

用bind方法:a.say.bind(b)()

案例二:call与apply的区别

var a={
     name:‘阿姨请不要把您闺女介绍给我‘,
     sex:‘男‘,
     age:‘18‘,
     say:function(school,grade){
          console.log(this.name+‘性别‘+this.sex+‘年龄‘+this.age+school+grade)
     }
}

var b={
     name:‘就喜欢把闺女介绍给你‘,
     sex:‘女‘,
     age:‘18‘
}

现在我们看say方法中多了两个参数,我们通过call和apply的参数进行传参

用call方法:a.say.call(b,‘清华‘,‘三年级‘)

用apply方法:a.say.apply(b,[‘清华‘,‘六年级‘])

call后面的参数与say方法中是一一对应的,而apply第二个参数是一个数组

用bind方法:a.say.bind(b,‘清华‘,‘三年级‘)
但是由于bind返回的仍然是一个函数,所以我们可以在调用的时候在进行传参
a.say.bind(b)(‘清华‘,‘三年级‘)

由于IE6-IE8不支持该方法,所以若想在不同浏览器中使用所以我们要做下处理

兼容处理bind方式

if(!Function.prototype.bind){
     Function.prototype.bind=function(obj){
          var This=this;
          var args=arguments;
          return function(){
               This.apply(obj,Array.prototype.slice.call(args,1))
          }
     }
}

注:还有一些不完善的部分,还会持续更新。显凑活着看!加油你们都是最棒的。么么哒!!!  另外大神可以指点不足之处

时间: 2024-08-10 18:57:39

凡尘:关于Apply、call、bind的详解的相关文章

JS中的call、apply、bind方法详解

bind 是返回对应函数,便于稍后调用:apply .call 则是立即调用 . apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向.JavaScript 的一大特点是,函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念. function fruits() {} fruits.prototype = { color: "red&

Linux学习之路-DNS原理-BIND配置详解

DNS原理-BIND配置详解 DNS系统概述 DNS系统作用     a) DNS,简单地说,就是Domain Name System,翻成中文就是"域名系统".主要的功能就是将人易于记忆的Domain Name与人不容易记忆的IP Address作转换.      b) DNS提供正向解析和反向解析          正向解析:根据主机名称(域名)查找对应的IP地址.          反向解析:根据IP地址查找对应的主机域名 DNS系统结构  系统结构原理  目前DNS采用的是分布

c/c++ 标准库 bind 函数 详解

标准库 bind 函数 详解 bind函数:接收一个函数名作为参数,生成一个新的函数. auto newCallable = bind(callbale, arg_list); arg_list中的参数可能包含入_1, _2等,这些是新函数newCallable的参数. 在这篇博客lambda 表达式 介绍 中,讨论了find_if的第三个参数的问题,当时是用lambda表达式解决的,有了bind函数后,也可以用bind函数解决. 解决办法:bind(check_size, _1, sz) au

银钻娱乐客服15687949443开户关于bind()函数详解

相信很多接触过jQuery的小伙伴对bind()函数一点都不陌生吧,但是很多小伙伴还不是很清bind()的含义与使用,bind()函数用于为每个匹配元素的一个或多个事件绑定事件处理函数.今天我们就带大家详细介绍下jQuery中关于bind()函数详解! 此外,你还可以额外传递给事件处理函数一些所需的数据. 执行bind()时,事件处理函数会绑定到每个匹配元素上.因此你使用bind()所有button元素绑定了click事件,是为当时文档中存在的每个button元素绑定click事件.如果之后你向

js apply()与call()方法详解

摘自此处:http://blog.csdn.net/business122/article/details/8000676 Js apply方法详解 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家分享..  如有什么不对的或者说法不明确的地方希望读者多多提一些意见,以便共同提高.. 主要我是要解决一下几个问题: 1.apply和call的区别在

《Javascript高级程序设计》读书笔记之bind函数详解

为什么需要bind var name = "The Window"; var object = { name: "My Object", getNameFunc: function () { return function () { return this.name; } } }; alert(object.getNameFunc()()); //"The Window" object.getNameFunc()返回一个匿名函数,在全局环境调用该

bind函数详解(转)

var name = "The Window"; var object = { name: "My Object", getNameFunc: function () { return function () { return this.name; } } }; alert(object.getNameFunc()()); //"The Window" object.getNameFunc()返回一个匿名函数,在全局环境调用该函数,this指向的

(十一)socket、connect、bind函数详解

一.socket函数 1.头文件: #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> 2.函数原型: int socket(int domain, int type, int protocol); socket函数类似于open,用来打开一个网络连接,如果成功则返回一个网络文件描述符(int类型),之后我们操作这个网络连接都通过这个网络文件描述符. dimain:域,网络域,网络地址范围(IPV4或IPV6

JavaScript中的apply和call函数详解

第一次翻译技术文章,见笑了! 翻译原文:Function.apply and Function.call in JavaScript 第一段略. 每个JavaScript函数都会有很多附属的(attached)方法,包括toString().call()以及apply().听起来,你是否会感到奇怪,一个函数可能会有属于它自己的方法,但是记住,JavaScript中的每个函数都是一个对象.看一下这篇文章,复习一下(refresher)JavaScript特性.你可能还想知道JavaScript中函