转:javascript方法--bind()

javascript方法--bind()

bind方法,顾名思义,就是绑定的意思,到底是怎么绑定然后怎么用呢,下面就来说说我对这个方法的理解。

 

语法

fun.bind(this,arg1,arg2,...)

bind()方法会创建一个新的函数,称为绑定函数,fun方法在this环境下调用

该方法可传入两个参数,第一个参数作为this作用域,可以理解为让fun函数在this作用域下运行(移花接木,所以this对象 可以借用到fun函数),第二个及以后的参数则作为函数的参数调用

bind()方法绑定函数作用域不会像call和apply方法会对目标函数进行自动执行,call和apply不能用于事件绑定

 

实例 

1.创建绑定函数

this.a = 1;
var module = {a : 2,getA:function() {return this.a;    }
};
module.getA();//2var getA1 = module.getA;
// getA在外部调用,此时的this指向了全局对象
getA1();//1// 再把getA1方法绑定到module环境上
var getA2 = getA1.bind(module);
getA2(); //2

 

从上面的例子可以看出,为什么要创建绑定函数,就是当我们调用某些函数的时候是要在特定环境下才能调用到,所以我们就要把函数放在特定环境下,就是使用bind把函数绑定到特定的所需的环境下。

 

 

2.让函数拥有预设的参数

使用bind()方法使函数拥有预设的初始参数,这些参数会排在最前面,传给绑定函数的参数会跟在它们后面

function list(){// 让类数组arguments拥有数组的方法slice,这个函数实现了简单把类数组转换成数组return Array.prototype.slice.call(arguments);
}list(1,2,3);//[1,2,3]//给list绑定一个预设参数4 
var list1 = list.bind(undefined,4);list1();//[4]list1(1,2,3);//[4,1,2,3]

 

 

3.setTimeout的使用

正常情况下,调用setTimeout的时候this会指向全局对象,但是使用类的方法时我们需要指向类的实例,所以要把this,绑定要回调函数方便继续使用实例

function Fun1() { this.name = 1;}
Fun1.prototype.fun2 = function() {window.setTimeout(this.fun3.bind(this), 1000);}
Fun1.prototype.fun3 = function(){console.log('name:'+this.name);//name:1
}
var fun = new Fun1();
fun.fun2();

 

 

4.快捷方法--把类数组转换成数组

第一种方法是使用apply方法

 function fun1() {var slice = Array.prototype.slice;return slice.apply(arguments);}fun1(1,2,3);//[1,2,3]

 

第二种方法是使用call方法和bind方法一起使用

function fun2() {var unboundSlice = Array.prototype.slice;// 把函数的call方法绑定在数组slice方法上,之后再给call方法传递参数var slice = Function.prototype.call.bind(unboundSlice);return slice(arguments);
}fun2(1,2,3);//[1,2,3]

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/553968.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win7系统每次开机都需要疑难解答的原因与解决方法

最近有些win7旗舰版的用户发现自己的电脑每次开机都无法正常连接网络,需要自己手动点击一下疑难解答才可以恢复正常连接,非常麻烦,那么Win7旗舰版系统每次开机都需要疑难解答怎么办呢?下面小编就给大家带来了win7系统每次开机都需要疑难解答…

Win7旗舰版禁止修改文件属性的设置方法

大家都知道文件有只读、隐藏和存档三个属性,但是属性默认是可以修改的,如果一不小心修改错误的话,就可能导致文件丢失、损坏、被隐藏等等。为了避免这些问题的发生,我们可以禁止修改文件属性来保护文件的安全,下面介绍…

npm error enoent:no such file or directory...are-we-there-yet ; package.json文件和node_modules模相互转化

vue-cli项目一段时间没有变动,几个星期后继续编辑安装 npm install vue-skeleton-webpack-plugin 插件时报错 npm error enoent:no such file or directory...are-we-there-yet 错误 产生错误的原因:This is still an active issue on Modulus. Ive fo…

简单地使用webpack进行打包,一些常见打包错误

本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或…

win7空文件夹删不掉的原因及解决方法

大家在清理系统垃圾的时候,会发现有些文件夹明明已经空了但是就是删不掉,时间长了电脑就会积累很多空的文件夹,拖慢电脑的运行速度。Win7系统中空文件夹删不掉怎么解决?就此问题,下面跟大家分析一win7空文件夹删不掉的原因及解决…

(亲测)vue-cli项目添加骨架屏多种方式,自动生成骨架屏

vue-cli项目首页加载缓慢想要使用骨架屏效果,经过几天的踩坑,这里学习并记录一下vue项目自动生成骨架屏方法。 添加骨架屏,其优势在于: 写于HTML文件中,独立于Vue框架,节省了JS加载时间JS全局环境创建的执…

win7系统屏幕键盘打开教程

我们在电脑没有接入键盘或者键盘失灵等情况下,如果想要输入内容,可以使用系统自带的屏幕键盘。只需要在控制面板中打开屏幕键盘就可以使用了,下面就让我们一起看看win7系统屏幕键盘打开教程吧。 1、首先点击左下角的“开始”,在右…

Vue-cli 项目优化归纳(打包、源码、用户体验)

前言:vue-cli项目开发打包部署后,存在问题有首次首页加载过慢,包括加载缓慢问题,需要进行vue项目优化。下面是对vue性能优化方法进行归纳,后面会对方法进行亲测。 主要包括:代码包打包优化、编码优化、用户…

win7系统图标太大的缩小教程

win7系统图标太大怎么办?图标大小直接影响了系统的第一观感,一个大小合适的图标能够让用户在使用时拥有更舒服的操作体验,也能在一定程度上避免视力和精神的消耗。一般来说图标不宜太大,如果太大了我们可以将它缩小,下面就一起看…

JS中的prototype、__proto__与constructor,原型和原型链

理解原型的几个关键点: 1、所有的引用类型(数组、函数、对象)可以自由扩展属性(除null以外); 2、所有的引用类型(对象)都有一个’_ _ proto_ _属性(也叫隐式原型,它是一个普通的对…

win7系统图标异常修复方法

我们在使用win7的时候有可能会碰到图标异常的情况,一般来说都是因为误操作了某些程序或者被某些软件暗改了,这时候我们需要手动去重新设置一下图标,方法也很简单,下面就一起看看win7系统图标异常修复方法吧。 win7系统图标异常修…

彻底理解cookie,session,token

转载自:https://www.cnblogs.com/moyand/p/9047978.html 发展史 1、很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新…

硬盘基本知识(磁头、磁道、扇区、柱面),格式化容量计算

计算差: 在购买硬盘之后,细心的人会发现,在操作系统当中硬盘的容量与官方标称的容量不符,都要少于标称容量,容量越大则这个差异越大。标称40GB的硬盘,在操作系统中显示只有38GB;80GB的硬盘只有7…

在浏览器中输入网址总是打开同一个网站怎么回

我们经常使用浏览器来访问不同的网站,但是有用户发现自己无论在浏览器中输入怎样的网址,打开的同一个网站,这是怎么回事?小编认为应该是用户浏览器被劫持引起的。那么小编下面就给大家讲讲解决的办法。 操作步骤: 1、按WinR键打…

常用校验码(奇偶校验码、海明校验码、CRC校验码)

转载自:https://www.cnblogs.com/VersionP1/p/7779251.html ,作者: FunnyOne 常用校验码(奇偶校验码、海明校验码、CRC校验码) 一、奇偶校验码二、海明校验码三、CRC校验码 计算机系统运行时,各个部之间要进行数据交…

原码、反码、补码、移码

版权声明:本文为CSDN博主「刘水镜」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/liushuijinger/article/details/7429197 原码: 如果机器字长为n&#…

【计算机系统】指令流水线

前言 流水线是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。各部件同时处理是针对不同指令而言的,比如说,指令流水线把一条指令分为取指、分析和执行3部分,可以同时处理取指和分析,但是不能同时处理一个部…

win7系统蓝屏代码0x0000003b怎么修复

蓝屏问题是操作系统无法从错误中恢复时,为保护电脑数据文件而强制显示的屏幕图像。并且给用户提供错误代码方便排查,那win7系统蓝屏代码0x0000003b怎么修复呢?就此问题,下面小编介绍win7系统蓝屏代码0x0000003b的修复方法。 win7系统蓝屏代…

计算机系统存储器分类和总线分类

计算机系统存储器分类 1、按存储介质 半导体存储器:用半导体器件组成的存储器。磁表面存储器:用磁性材料做成的存储器。光存储器 2、按存储方式 随机存储器:任何存储单元的内容都能被随机存取,且存取时间和存储单元的物理位置无…

win7看视频卡顿或声音画面不同步的解决步骤

win7看视频卡顿或声音画面不同步怎么办?相信大家在使用电脑观看视频的时候,都有遇到视频卡顿或声画不同步的情况吧,非常影响观看体验。发生这个问题的原因可能是视频本身有问题或者声卡出现问题了。接下来就让小编给大家讲讲win7看视频卡顿或声音画面不…