当前位置:首页 > 日记 > 正文

javascript中应用、调用和绑定的使用

javascript中应用、调用和绑定的使用
我希望通过这篇文章,可以清楚地加深对应用、调用、绑定的理解,并列出它们的一些用于增强内存的方法。
申请,电话

在Javascript中,调用和应用程序是为了改变函数的运行时上下文(上下文),换句话说,就是在函数体中改变这个方向。
Javascript的一个特点是有定义上下文和运行时上下文和上下文可以更改等概念。

首先给你一个代码示例列表。
函数(水果){ }
fruits.prototype = { {
颜色:红色
表示:函数(){
console.log(我的色彩+这个颜色);
}
}
苹果新水果;
Apple.say(); / /我的颜色是红色的
但是,如果我们有一个对象,香蕉=颜色:黄},我们不想重新定义它的方法,那么我们可以通过调用或应用来使用苹果说方法。
香蕉= {
颜色:黄色
}
apple.say.call(香蕉); / /我的颜色是黄色的
apple.say.apply(香蕉); / /我的颜色是黄色的
所以,我们可以看到调用和动态变化这一点,当一个对象没有一个方法(香蕉在栗子不说的方法),但另一个是(苹果在栗子说的方法),我们可以使用调用或应用方法与其他对象操作。

应用与调用的区别

对于应用程序和调用二,效果是完全相同的,但是接受参数的方式是不一样的:
功函数(arg1,arg2 =功能){
};
你可以这样称呼它如下:
func.call(这arg1,arg2);
Func.apply(,{ arg1,arg2 })
如果这是你想指定的上下文,它可以是任何Javascript对象(一切都是对象,Javascript),需要在序列参数传递,则将参数数组中。 U3000 U3000

在Javascript中,函数的参数数不是固定的,所以如果条件合适,在参数清晰时调用。

当你不确定的时候,使用应用程序,然后将参数推送到数组中。当参数的数量不确定时,函数也可以通过参数数组遍历。
为了巩固和加深记忆,下面列出了一些常用用法。

1。除了数组之间
VaR array1 = { 12,foo
VaR array2 = {无名氏
Array.prototype.push.apply(array1,array2);
/ * 2 = { 12,foo,{名称乔},2458,DOE,555, 100 }。
2。获取数组中的最大值和最小值。
var数字= { 5, 458, 120,- 215 };
无功maxinnumbers = math.max.apply(数学、数字), / / 458
maxinnumbers = math.max.call(数学,5, 458, 120,215); / / 458
数字本身没有MAX方法,但马思有它,我们可以通过调用或应用来使用它的方法。

三.确认它是一个数组(如toString()方法没有被改写)
FunctionisArray(obj){
返回object.prototype.tostring.call(obj)={ }对象数组;
}
4。类(伪)数组的数组方法
无功domnodes = array.prototype.slice.call(document.getelementsbytagname(*)));
有一种称为Javascript对象结构伪数组。特别是,争论的对象也被称为相对应的,document.childnodes等等。他们返回列表对象伪阵列。我们不能应用的推动,流行,在阵列的其它方法。

但我们可以变换成一个真正array.prototype.slice.call数组对象的长度属性,使domnodes可以适用于所有的方法在阵列。
深刻理解使用和调用的用法

下面是对应用程序和调用的更深入的理解。

日志的方法是定义允许它作为一个console.log代理的方法。常见的解决方案是:
函数日志(MSG){
console.log(MSG);
}
日志(1);1
log(1,2); / 1
上述方法可以解决最基本的需求,但当传入参数的数量不确定时,上述方法是无效的,您可以考虑使用或调用这个时间,注意不确定这里引入了多少参数,所以使用应用程序是最好的方法,如下所示:
函数日志(){
console.log.apply(控制台、参数);
};
日志(1);1
日志(1,2); / / 1 2
下一个要求是为每个日志消息添加一个(应用)退出,例如:
日志(Hello World)
如何做是优雅的。在这个时候,我们需要考虑的参数是一个伪阵,将其转化到array.prototype.slice.call标准阵列,然后阵列的方法不换位。
函数日志(){
var args = array.prototype.slice.call(参数);
args.unshift('('(APP));
console.log.apply(控制台,args);
};

绑定

表示应用和调用,然后讨论绑定。绑定()方法非常类似于应用和调用,并且可以在函数体中改变这个方向。

MDN:绑定()方法会创建一个新的功能叫做绑定功能,调用绑定的函数时,创建成绑定绑定功能()的第一个参数为本,来绑定(二)参数和后期的方法与参数绑定函数本身按照顺序为原函数调用原有的功能。

直接去看看如何使用它。在常见的单体模式,我们通常用_this,,自我等保存,所以我们可以继续把它改变上下文之后。喜欢这uff1a
var { { { {
酒吧:1,
EventBind:函数(){
无功_this =这;
$('。someclass '),(听到咔哒声,功能(事件){ {)
对事件进行操作
console.log(_this。酒吧); / / 1
});
}
}
因为Javascript的独特机制,从eventbind上下文的变化:功能({ })$('。someclass '),(听到咔哒声,功能(事件){ })。上面的变量保存起来很有用,没有问题。当然,使用绑定()可以更优雅地解决问题。
var { { { {
酒吧:1,
EventBind:函数(){
$('。someclass '),(听到咔哒声,功能(事件){ {)
对事件进行操作
console.log(这条); / / 1
}绑定(这个);
}
}
在上面的代码中,绑定()创建一个函数。当单击事件必须被调用时,它的关键字将被设置为传入值(这里是调用绑定()时引入的参数)。因此,在这里,我们将所需的上下文(这个事实)绑定到绑定()函数。然后,当回调函数被执行时,这指向富对象:
函数(){()
(这console.log。x);
}
var { { { {
X:3
}
(bar);未定义的
VAR函数= bar.bind(Foo);
函数(3);
这里我们创建一个新函数。当使用绑定()创建绑定函数时,当它被执行时,当我们调用bar()时,它将被设置为,而不是全局范围。

有一个有趣的问题,如果连续绑定()()两次,或者三连续()三次,输出值是多少喜欢这uff1a
函数(){()
(这console.log。x);
}
var { { { {
X:3
}
var = {
X:4
}
VAR函数= bar.bind(Foo)Bind(SED);
(函数);

VaR FIV = { {
X:5
}
VAR函数= bar.bind(Foo)。Bind(SED)Bind(FIV);
(函数);
答案是,两次仍然是3,而不是预期的4和5。原因是在Javascript中,多个绑定()是无效的。更深层次的原因,(绑定)实现,使用调用/绑定的内部包中的等效函数(第二个)相当于重新包装第一个绑定(),所以在两个绑定无效之后。

应用、调用和绑定的比较

那么,应用程序、调用和绑定三之间有什么异同呢何时使用应用、调用以及何时使用绑定:
var obj = { {
X:81,
};
var { { { {
GetX:函数(){
返回这个;
}
}
console.log(foo.getx.bind(obj)()); / / 81
console.log(foo.getx.call(obj)); / / 81
console.log(foo.getx.apply(obj)); / / 81
三个输出都是81,但注意使用绑定()方法,他在括号后面。

也就是说,不同的是,当您想更改上下文而不是立即执行上下文时,使用绑定()方法,但是当回调执行时,应用调用将立即执行该函数。

再次总结:

应用程序、调用和绑定三都是用于改变函数的对象的所有指向。

应用程序、调用和绑定三的第一个参数是指向该对象的对象,也就是要指定的上下文;

应用、调用和绑定的三个用户可以使用下面的参数传递参数。

绑定是返回到相应函数的函数,它很容易稍后调用;立即调用应用程序和调用。

好了,这篇文章讲述了应用,调用,绑定在javascript模型中的使用教程,到了最后的介绍,希望大家喜欢它。

相关文章

CorelDRAW12和动态辅助线功能的详

CorelDRAW12和动态辅助线功能的详

动态,解释,功能,辅助线,详细,本教程介绍朋友到CorelDRAW12动态捕捉和动态辅助线功能。本教程是比较基础的。非常适合初学者学习,并推荐它。让我们一起学习。 今天给大家介绍CorelDRAW12动态捕捉和动态辅助线功能的方法,用于比较的基础教程,但…

PS首饰设计1111嘉年华海报教程

PS首饰设计1111嘉年华海报教程

教程,嘉年华,海报,首饰,电脑软件,本教程介绍朋友PS珠宝设计1111狂欢节海报设计出来的教程的方法,很漂亮,和推荐的操作非常简单,我们看看吧 1111很快就来。电力巨头的炒作下,1111不仅成为光棍节,但也成为购物狂欢节,所以我们必须说,市场营销的力量…

Dreamweaver图形教程教你轻松创建

Dreamweaver图形教程教你轻松创建

图形,教程,教你,超酷,轻松,作为一个网页制作工具Dreamweaver不仅可以制作网页,但也可以做很好的flash相册。今天,萧边教你使用Dreamweaver创建很酷的flash相册,感兴趣的朋友一起学习。 Flash相册看起来非常漂亮,不想自己做,Flash我们不使用它,所…

在未来的生活中如果我记得你搞笑和

在未来的生活中如果我记得你搞笑和

个性签名,滑稽,悲伤,搞笑,生活中,不是我们不适合,而是你比我们好。 水果忍者告诉我们:水果与炸弹同在,机遇与挑战并存。 嘿,你的丑陋能衬托出世界的美丽 我妈妈生了一本限量版的《爱》,你看看吧。 现在这么多奇葩,为什么我们有这些共同的感情 承…

快乐个性爱签名快乐个性签名

快乐个性爱签名快乐个性签名

快乐,个性签名,电脑软件,在我的生活中,我需要的是一个让我感到被爱的人,不要被使用。下面的小编辑分享快乐的个性签名,欢迎阅读: 快乐人格签名: 打雷的时候,站在大树下,对上帝说,我也想穿越马路! 我只能默默地在你身后,看着你和她的暧昧。 明与明的…

PS合成燕窝位于怪异的骨骼树上。

PS合成燕窝位于怪异的骨骼树上。

树上,怪异,电脑软件,PS,万圣节快到了。今天萧边教你使用PS图象处理软件作出怪异的骷髅。The tutorial is very simple. 喜欢朋友,可以一起学习。 其结果看起来很抽象,很难合成。首先,将土壤、地面和天空结合起来,然后大致添加树根、骨架、鸟窝…

WPS演示如何插入相关动画效果WPS演

WPS演示如何插入相关动画效果WPS演

教程,动画效果,演示,电脑软件,WPS,WPS软件以其小巧、快速,所以很多朋友都被接受,在使用过程中由于我们不熟悉,即使会有一些问题,毕竟这与以前的演示软件的差异不大,自然会在演示文稿中插入相关的动画及其他相关程序是内在的问题,在下一篇文章中有…

PS图象处理软件是草原上的人们用美

PS图象处理软件是草原上的人们用美

图象,处理软件,灯光,效果,美丽,材质图片是在阴天拍摄的,画面的阳光效果比较少,可以给天空和局部调整时增加暖色画面,然后绘制局部渲染高光、背光效果的图片。 材质图片是在阴天拍摄的,画面的阳光效果比较少,可以给天空和局部调整时增加暖色画面…

WPS总结法

WPS总结法

电脑软件,WPS,很多统计朋友使用WPS格式,当我们寻找一串数字时,我们使用WPS来求和。下面的小编辑器将介绍几种用于WPS相加的方法。 首先打开WPS,然后以下面的数字为例。 方法1: 1,我们进入下这串数字;= su会有下拉菜单,我们选择和在下拉菜单,按回车…

在java中使用正则表达式处理文本数

在java中使用正则表达式处理文本数

正则表达式,数据,文本,电脑软件,java,本文将介绍如何使用java正则表达式处理文本数据,正则表达式是一个字符串,但又不同于普通的字符串,正则表达式是抽象的一组类似的字符串,如下面的字符串。 a98b c0912d c10b a12345678d AB 我们仔细分析上面…

javascript学习笔记整理(概述、变量、数据

javascript学习笔记整理(概述、变量、数据

数据类型,变量,概要,学习笔记,电脑软件,A.概述 1。输出工具: Document.write () - can be HTML 警报()字符串 提示(文本,默认的文字) 文本是可选的。要在对话框中显示的纯文本(而不是HTML格式的文本)。 默认的文字---是可选的,默认的输入文本…

简介:PS图象处理软件新的文件和存储

简介:PS图象处理软件新的文件和存储

存储文件,文件,图象,处理软件,简介,今天,我将与你分享一个入门教程,这是教你如何创建文件和存储文件为PS图象处理软件。推荐它,让我们来一起学习 今天为您介绍PS图象处理软件新的文件和存储文件的方法,教程,非常好,值得学习,推荐,大家一起学习吧! 方…