JavaScript中的转发功能
Forwarding functions in JavaScript?
我正在为数据库API编写一个小包装器,以添加自定义功能。
view
函数我只想照原样使用,不想修改,所以我尝试分配函数:
core.db.view = bucket.view;
该函数似乎可以工作,但存在HTTP错误。如果我包装函数,一切都很好,但我更喜欢只分配函数。
core.db.view = function (a, b, c) {
return bucket.view(a, b, c);
};
有什么想法吗?
下面两个调用之间的唯一区别是它们在以下上下文中执行:
core.db.view = bucket.view;
bucket.view() // 'this' will be bucket
core.db.view() // 'this' will be core.db
解决方案:
core.db.view = bucket.view.bind(bucket);
附言:bind方法的工作原理与您自己包装函数的方式类似。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
在Javascript 中
obj.method();
和
var m = obj.method; m();
是不同的东西。更具体地说,在两种情况下,执行方法主体期间的this
值不同:在第一种情况下this
将是obj
,在第二种情况下则this
将是全局对象。
一个解决方案是将方法调用封装在闭包中:
var m = function(){return obj.method()};
相关文章:
- 添加文字和评论功能更新Div
- JavaScript打印功能使日历停止工作
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 如何防止网页加载后自动启动功能
- 除修剪外的其他功能
- 悬停功能触发器
- 使用angularjs向浏览器发送servlet响应(下载功能)
- 删除CKEditor工具栏按钮,但不删除功能
- 异步facebook功能
- 如何将chrome扩展功能移植到移动设备(特别是jquery和trello)
- jQuery滚动功能只工作一次
- Graphiti中是否有任何工具提示功能
- React redux初始化功能,无论状态变化如何
- 在哪里可以学习ECMAScript标准中尚未包含的JavaScript功能
- 正在获取select上的功能id
- Rhino打印功能
- 使用(navigator.geolocation)检测浏览器功能错误
- 主体单击删除功能上的输入框宽度
- JQuery使用相同的功能自动完成各种输入文本
- JavaScript中的转发功能