jsbind函数使用闭包保存执行上下文
执行 使用 函数 保存 闭包 上下文
2023-06-13 09:14:32 时间
window.name="thewindowobject"
functionscopeTest(){
returnthis.name;
}
//callingthefunctioninglobalscope:
scopeTest()
//->"thewindowobject"
varfoo={
name:"thefooobject!",
otherScopeTest:function(){returnthis.name}
};
foo.otherScopeTest();//->"thefooobject!"
varfoo_otherScopeTest=foo.otherScopeTest;
foo_otherScopeTest();
//?>"thewindowobject"
如果你希望将一个对象的函数赋值给另外一个变量后,这个函数的执行上下文仍然为这个对象,那么就需要用到bind方法。
bind的实现如下:
//The.bindmethodfromPrototype.js
Function.prototype.bind=function(){
varfn=this,args=Array.prototype.slice.call(arguments),object=args.shift();
returnfunction(){
returnfn.apply(object,
args.concat(Array.prototype.slice.call(arguments)));
};
};
使用示例:
varobj={
name:"Anicedemo",
fx:function(){
alert(this.name);
}
};
window.name="Iamsuchabeautifulwindow!";
functionrunFx(f){
f();
}
varfx2=obj.fx.bind(obj);
runFx(obj.fx);
runFx(fx2);
参考:
http://www.prototypejs.org/api/function/bind
PS:
才发现prototypejs的API文档解释的这么详细,一定要花点时间多看看了。
我的简单的实现:
Function.prototype.bind=function(obj){
var_this=this;
returnfunction(){
return_this.apply(obj,
Array.prototype.slice.call(arguments));
}
}
varname="window",
foo={
name:"fooobject",
show:function(){
returnthis.name;
}
};
console.assert(foo.show()=="fooobject",
"expectedfooobject,actualis"+foo.show());
varfoo_show=foo.show;
console.assert(foo_show()=="window",
"expectediswindow,actualis"+foo_show());
varfoo_show_bind=foo.show.bind(foo);
console.assert(foo_show_bind()=="fooobject",
"expectedisfooobject,actualis"+foo_show_bind());
相关文章
- Oracle SQL 性能调优:使用SqlPatch固定执行计划
- 【SSM – SpringMVC篇】02 – SpringMVC执行流程详解,SpringMVC三大核心组件和使用,SpringMVC头文件模板
- python执行测试用例_java随机函数random使用方法
- CompletableFuture在超时后,能够停止执行吗?
- 如何查询已经执行过的流程信息?
- oracle数据库定义变量和使用_oracle执行变量
- Django Ajax 实现Web命令行执行
- pytest学习和使用14-Pytest用例执行结果有哪几种状态?
- python-Python与SQLite数据库-使用Python执行SQLite查询(二)
- 使用bat脚本执行MySQL数据库操作(bat执行mysql语句)
- MySQL 执行日志文件:深入研究(mysql执行日志文件)
- 一枚导弹的各个分系统是如何运作的(五)“大海航行靠舵手”——导弹控制执行装置
- 使用Oracle的变量执行动态SQL(oracle执行变量)
- 优化使用Oracle索引最佳实践:提升查询执行性能(oracle索引执行)
- mssql使用技巧:精准查询执行语句(查询mssql执行语句)
- MySQL数据库的SQL语句执行过程(mysql执行sql)
- 使用MSSQL安全地执行除法运算(mssql 除法)
- CMD中使用MySQL轻松6步(cmd如何执行mysql)
- 使用CMD命令快速执行Mysql代码(cmd命令mysql代码)
- MySQL持续无法执行可能的解决方案(mysql一直执行不了)
- 外部命令,怎么办MySQL 命令无法执行,不用担心,只需将其路径添加至系统环境变量中即可
- 高效提升企业运维效能Oracle PLSQL执行框架引领未来(Oracle plb执行)
- PHP执行linux系统命令的常用函数使用说明
- mysql初始执行文件的使用介绍
- 深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
- PHP启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)