数码资讯
Javascript中绑定()方法的使用与实现分析
在讨论绑定()方法之前,让我们先看一个问题: 无功altwrite =段; altwrite(你好); 上面的代码有什么问题1。 2的正确操作是什么。 如何实现 / / 3.bind()方法 对于以上题目,答案并不太难。主要测试点是这个指向的问题。Altwrite()函数改变这个方向全球或窗口对象,
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
在讨论绑定()方法之前,让我们先看一个问题:
无功altwrite =段;
altwrite(你好);
上面的代码有什么问题1。
2的正确操作是什么。
如何实现 / / 3.bind()方法
对于以上题目,答案并不太难。主要测试点是这个指向的问题。Altwrite()函数改变这个方向全球或窗口对象,导致异常的非法调用执行时。正确的解决方案是使用绑定()方法。
Altwrite.bind(文件)(你好)
当然,您还可以使用调用()方法:
altwrite.call(文件,你好)
本文的重点是讨论第三个问题绑定()方法的实现,并且在我们开始讨论绑定()的实现之前,让我们先看看绑定()方法的使用情况:
结合功能
最简单的使用绑定()是创建一个函数,使得函数具有相同的价值无论怎么叫。一个常见的错误,如上面的例子,以方法的对象,然后调用它,并希望这一点原始对象。如果没有特殊的处理完成后,原来的对象将丢失。bind()方法可以解决这个问题的一个美丽的:
this.num = 9;
VaR的mymodule = { {
Num:81,
GetNum:函数(){退货。民;}
};
module.getnum(81); / /
无功getnum = module.getnum;
(getnum); / / 9,因为在这种情况下,这指的是全局对象
/ /函数创建a'this'bound模块
无功boundgetnum = getnum.bind(模块);
BoundGetNum(81); / /
部分函数(部分函数)
部分函数也称为部分应用程序,它截取部分函数定义的一部分:
部分应用可以描述为接受一个函数,即项目的第二部分是对与错。
这是一个很好的特性,使用绑定()设置函数的预定义参数,然后将调用传递给其他参数:
函数列表(){
返回array.prototype.slice.call(参数);
}
无功表=表(1, 2, 3); / / { 1, 2, 3 }
预定义的参数 37
无功leadingthirtysevenlist = list.bind(定义,37);
var = leadingthirtysevenlist(清单); / / { 37 }
var目录3 = leadingthirtysevenlist(1, 2, 3); / / { 37, 1, 2,3 }
使用setTimeout
总的来说,setTimeout()的这一点,一个窗口或全局对象。使用一个类的方法的时候,你需要一本指向一个类的实例,你可以使用绑定()将这个回调函数来管理实例。
功能布鲁默(){
this.petalcount = math.ceil(Math.random()* 12)+ 1;
}
调用声明函数后的第二秒
Bloomer.prototype.bloom =函数(){
window.settimeout(this.declare.bind(这),1000);
};
Bloomer.prototype.declare =函数(){
console.log(我有+ this.petalcount +花瓣!
};
注:以上方法也可以用于事件处理函数和setInterval方法
作为构造函数的绑定函数
绑定函数也适用于使用新操作符构造目标函数的实例。当使用绑定函数构造实例时,注意这将被忽略,但传入参数仍然可用。
函数点(x,y){
这个;
这个,y = y;
}
point.prototype.tostring =函数(){
返回这个x++;
};
var =新点(1, 2);
(p.tostring); / / '1,2
无功emptyobj = { };
无功yaxispoint = point.bind(emptyobj,0 / * * /);
该示例不支持,
/本机绑定支持:
无功yaxispoint = point.bind(null,0 / * * /);
无功axispoint =新yaxispoint(5);
(axispoint ToString); / / '0,5
axispoint instanceof点; / /真的
axispoint是yaxispoint; / /真的
新点(17, 42)是yaxispoint; / /真的
在上面的例子中,点和yaxispoint分享原型,所以instanceof运算符用于判断真。
快捷方式
绑定()还可以为需要特定值的函数创建快捷方式。
例如,要将对象数组转换成真正的数组,可能的例子如下:
var片= array.prototype.slice;
…
Slice.call(参数);
如果使用绑定(),情况就变得简单了。
无功unboundslice = array.prototype.slice;
var片= Function.prototype.call.bind(unboundslice);
…
切片(参数);
实现
上面的部分显示绑定()具有多种使用场景,但绑定()函数在ECMA-262第五版新增。它可能不能在所有浏览器上运行,这需要我们自己实现绑定()函数。
首先,我们可以通过指定目标函数的范围来简单地实现绑定()方法:
function.prototype.bind =功能(上下文){
这就是调用目标函数的绑定方法
返回函数(){
返回self.apply(语境参数);
};
};
考虑到库里的函数,我们可以建立一个更强大的(绑定):
function.prototype.bind =功能(上下文){
var args = array.prototype.slice.call(参数1),
自我=这个;
返回函数(){
无功innerargs = array.prototype.slice.call(参数);
无功finalargs = args.concat(innerargs);
返回self.apply(上下文,finalargs);
};
};
此绑定()方法可以绑定对象,也支持绑定时引用的传递。
继续,Javascript的功能也可以用作构造函数。当以这种方式调用绑定函数时,情况就更加微妙了。它涉及到原型链的传递。
function.prototype.bind =功能(上下文){
var args = array.prototype.slice(参数1),
f =函数(){ },
自我=这个,
绑定=函数(){
无功innerargs = array.prototype.slice.call(参数);
无功finalargs = args.concat(innerargs);
返回self.apply((这是F:上下文),finalargs);
};
f.prototype = self.prototype;
bound.prototype =新的f();
返回绑定;
};
这是结合Javascript的Web应用程序(一本书)的实现:通过设置一个传递函数和构造函数F,bind()的结合在同一个原型链功能,随着新算子函数调用绑定后,返回的对象也可以使用正常的实例,所以这是最严格的(绑定)的实现。
为了支持浏览器中的绑定()函数,只需稍微修改上面的函数就可以了。
function.prototype.bind =功能(o){
如果(typeof这!=函数){
抛出TypeError(function.prototype.bind -什么是想肯定不是));
}
无功aargs = array.prototype.slice.call(参数1),
这ftobind =,
浮点空操作=函数(){ },
fbound =函数(){
返回ftobind.apply(
这是这这这| |浮点空操作窗口,
AArgs.concat(array.prototype.slice.call(参数))
);
};
fnop.prototype = this.prototype;
fbound.prototype =新的浮点空操作();
返回fbound;
};
Javascript结合以上分析()方法是萧边和大家分享的内容的使用和实施,希望能给大家一个参考,我希望你能支持它。
无功altwrite =段;
altwrite(你好);
上面的代码有什么问题1。
2的正确操作是什么。
如何实现 / / 3.bind()方法
对于以上题目,答案并不太难。主要测试点是这个指向的问题。Altwrite()函数改变这个方向全球或窗口对象,导致异常的非法调用执行时。正确的解决方案是使用绑定()方法。
Altwrite.bind(文件)(你好)
当然,您还可以使用调用()方法:
altwrite.call(文件,你好)
本文的重点是讨论第三个问题绑定()方法的实现,并且在我们开始讨论绑定()的实现之前,让我们先看看绑定()方法的使用情况:
结合功能
最简单的使用绑定()是创建一个函数,使得函数具有相同的价值无论怎么叫。一个常见的错误,如上面的例子,以方法的对象,然后调用它,并希望这一点原始对象。如果没有特殊的处理完成后,原来的对象将丢失。bind()方法可以解决这个问题的一个美丽的:
this.num = 9;
VaR的mymodule = { {
Num:81,
GetNum:函数(){退货。民;}
};
module.getnum(81); / /
无功getnum = module.getnum;
(getnum); / / 9,因为在这种情况下,这指的是全局对象
/ /函数创建a'this'bound模块
无功boundgetnum = getnum.bind(模块);
BoundGetNum(81); / /
部分函数(部分函数)
部分函数也称为部分应用程序,它截取部分函数定义的一部分:
部分应用可以描述为接受一个函数,即项目的第二部分是对与错。
这是一个很好的特性,使用绑定()设置函数的预定义参数,然后将调用传递给其他参数:
函数列表(){
返回array.prototype.slice.call(参数);
}
无功表=表(1, 2, 3); / / { 1, 2, 3 }
预定义的参数 37
无功leadingthirtysevenlist = list.bind(定义,37);
var = leadingthirtysevenlist(清单); / / { 37 }
var目录3 = leadingthirtysevenlist(1, 2, 3); / / { 37, 1, 2,3 }
使用setTimeout
总的来说,setTimeout()的这一点,一个窗口或全局对象。使用一个类的方法的时候,你需要一本指向一个类的实例,你可以使用绑定()将这个回调函数来管理实例。
功能布鲁默(){
this.petalcount = math.ceil(Math.random()* 12)+ 1;
}
调用声明函数后的第二秒
Bloomer.prototype.bloom =函数(){
window.settimeout(this.declare.bind(这),1000);
};
Bloomer.prototype.declare =函数(){
console.log(我有+ this.petalcount +花瓣!
};
注:以上方法也可以用于事件处理函数和setInterval方法
作为构造函数的绑定函数
绑定函数也适用于使用新操作符构造目标函数的实例。当使用绑定函数构造实例时,注意这将被忽略,但传入参数仍然可用。
函数点(x,y){
这个;
这个,y = y;
}
point.prototype.tostring =函数(){
返回这个x++;
};
var =新点(1, 2);
(p.tostring); / / '1,2
无功emptyobj = { };
无功yaxispoint = point.bind(emptyobj,0 / * * /);
该示例不支持,
/本机绑定支持:
无功yaxispoint = point.bind(null,0 / * * /);
无功axispoint =新yaxispoint(5);
(axispoint ToString); / / '0,5
axispoint instanceof点; / /真的
axispoint是yaxispoint; / /真的
新点(17, 42)是yaxispoint; / /真的
在上面的例子中,点和yaxispoint分享原型,所以instanceof运算符用于判断真。
快捷方式
绑定()还可以为需要特定值的函数创建快捷方式。
例如,要将对象数组转换成真正的数组,可能的例子如下:
var片= array.prototype.slice;
…
Slice.call(参数);
如果使用绑定(),情况就变得简单了。
无功unboundslice = array.prototype.slice;
var片= Function.prototype.call.bind(unboundslice);
…
切片(参数);
实现
上面的部分显示绑定()具有多种使用场景,但绑定()函数在ECMA-262第五版新增。它可能不能在所有浏览器上运行,这需要我们自己实现绑定()函数。
首先,我们可以通过指定目标函数的范围来简单地实现绑定()方法:
function.prototype.bind =功能(上下文){
这就是调用目标函数的绑定方法
返回函数(){
返回self.apply(语境参数);
};
};
考虑到库里的函数,我们可以建立一个更强大的(绑定):
function.prototype.bind =功能(上下文){
var args = array.prototype.slice.call(参数1),
自我=这个;
返回函数(){
无功innerargs = array.prototype.slice.call(参数);
无功finalargs = args.concat(innerargs);
返回self.apply(上下文,finalargs);
};
};
此绑定()方法可以绑定对象,也支持绑定时引用的传递。
继续,Javascript的功能也可以用作构造函数。当以这种方式调用绑定函数时,情况就更加微妙了。它涉及到原型链的传递。
function.prototype.bind =功能(上下文){
var args = array.prototype.slice(参数1),
f =函数(){ },
自我=这个,
绑定=函数(){
无功innerargs = array.prototype.slice.call(参数);
无功finalargs = args.concat(innerargs);
返回self.apply((这是F:上下文),finalargs);
};
f.prototype = self.prototype;
bound.prototype =新的f();
返回绑定;
};
这是结合Javascript的Web应用程序(一本书)的实现:通过设置一个传递函数和构造函数F,bind()的结合在同一个原型链功能,随着新算子函数调用绑定后,返回的对象也可以使用正常的实例,所以这是最严格的(绑定)的实现。
为了支持浏览器中的绑定()函数,只需稍微修改上面的函数就可以了。
function.prototype.bind =功能(o){
如果(typeof这!=函数){
抛出TypeError(function.prototype.bind -什么是想肯定不是));
}
无功aargs = array.prototype.slice.call(参数1),
这ftobind =,
浮点空操作=函数(){ },
fbound =函数(){
返回ftobind.apply(
这是这这这| |浮点空操作窗口,
AArgs.concat(array.prototype.slice.call(参数))
);
};
fnop.prototype = this.prototype;
fbound.prototype =新的浮点空操作();
返回fbound;
};
Javascript结合以上分析()方法是萧边和大家分享的内容的使用和实施,希望能给大家一个参考,我希望你能支持它。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。