JavaScript 中的方法指针/引用
method pointer/ref in javascript
这是我当前代码的示例:
var myObject = new Obj();
if(something)
myObject.method1(arg1, arg2);
else
myObject.method2(arg1, arg2);
以及我如何声明我的 obj :
function Obj() { }
Obj.prototype.method1 = function(a, b) { }
Obj.prototype.method2 = function(a, b) { }
由于我正在做这种测试很多时间,我想知道是否有可能做这样的事情:
if(something)
var method = method1;
else
var method = method2;
myObject.method(arg1, arg2);
是的,函数是 JavaScript 中的一类对象,因此您可以将函数引用存储在变量中,然后通过变量调用函数。在您的情况下,您需要以特殊方式执行此操作,以确保this
在呼叫中myObject
:
var method;
if(something)
method = myObject.method1;
else
method = myObject.method2;
method.call(myObject, arg1, arg2);
请注意末尾call
的使用: 这允许您调用函数并控制函数调用中的this
。
如果条件真的那么短,你可以这样做:
var method = something ? myObject.method1 : myObject.method2;
method.call(myObject, arg1, arg2);
甚至:
var method = something ? "method1" : "method2";
myObject[method](arg1, arg2);
更多探索:
-
Function#call
(在规范中 | 在 MDN 上) -
Function#apply
(在规范中 | 在 MDN 上) - 你必须记住
this
(在我的博客上) - 神话方法(在我的博客上)
你在变量中使用函数引用,如下所示:-
var method;
if(something)
var method = myObject.method1;
else
var method = myObject.method2;
method.call(myObject, arg1, arg2);
你可以做:
var method = myObject.method1;
然后这样称呼它:
method.call(myObject);
但您也可以bind
对象的方法:
var method = myObject.method1.bind(myObject);
然后你可以正常调用它:
method();
里面this
会myObject
您可以将bind
替换为简单:
var method = function() { myObject.method1(); }
如果要支持较旧的浏览器
相关文章:
- 引用对象中的通用值
- 如何在JavaScript中将字符串转换为函数引用
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 在动态创建的元素上获取对特定选择器的引用
- IIFE中的函数引用不可用
- 如何通过引用var Using DataTables来进行分页或排序
- 如何在创建键时引用来自同一对象的键
- Datatables:通过DOM数据源中的名称引用列
- 自引用回调
- 引用类变量中的原型方法
- 无法获取属性'selectedIndex'的未定义引用或null引用
- Vanilla JS通过引用移除数组元素
- 通过引用传递JavaScript对象
- 无法获取属性'Id'使用Knockout.js的未定义或空引用API
- JavaScript 中的方法指针/引用
- Javascript引用指针帮助/解释
- Javascript指针/引用的疯狂.有人能解释一下吗?
- 将指向服务对象属性的指针/引用添加到$scope变量
- 是否可以在JavaScript中获得对象属性的引用/指针
- 导出引用和指针node.js