方法指针/ ref在javascript中

时间:2013-10-26 16:24:56

标签: javascript

以下是我当前代码的示例:

var myObject = new Obj();

if(something)
    myObject.method1(arg1, arg2);
else
    myObject.method2(arg1, arg2);

以及我如何宣布我的对象:

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);

3 个答案:

答案 0 :(得分:2)

是的,函数是JavaScript中的第一类对象,因此您可以将函数引用存储在变量中,然后通过变量调用函数。在您的情况下,您需要以特殊方式执行此操作,以确保呼叫中thismyObject

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);

更多探索:

答案 1 :(得分:1)

在这样的变量中使用函数引用: -

var method;
if(something)
    var method = myObject.method1;
else
    var method = myObject.method2;

method.call(myObject, arg1, arg2);

答案 2 :(得分:0)

你可以这样做:

var method = myObject.method1;

然后称之为:

method.call(myObject);

但您也可以bind对象的方法:

var method = myObject.method1.bind(myObject);

然后你可以正常调用它:

method();
内部的

this将为myObject

您可以使用简单的替换bind

var method = function() { myObject.method1(); }

如果您想支持旧浏览器