Javascript 类 - 即时访问函数

标签 javascript class

我有一个 javascript 类:

MyClass = function(){
    this.m_SomeData = 5;
};

我已经为那个类创建了一些函数:

MyClass.prototype.MyClassFunction_1 = function(arg){
    // Some stuff that can return false
    return true;
};
MyClass.prototype.MyClassFunction_2 = function(arg){
    // Some stuff that can return false
    return true;
};
MyClass.prototype.MyClassFunction_3 = function(arg){
    // Some stuff that can return false
    return true;
};

稍后我创建了该类的一个实例。 (它们可以组合成一个函数,但存在一些设计问题使得将它们分开更好):

var myInstance = new MyClass();

现在是棘手的一点。在“if”语句中,我正在执行以下操作(以及其他操作)。

var funcUse;
var arg = 3; // Some value created at run time)
if((funcUse = val === 0 ? MyClassFunction_1
                        : (val === 1 ? MyClassFunction_2 : MyClassFunction_3)) !== "undefined" &&
    myInstance.funcUse(arg)){
}

明显的问题是在“if”语句中 MyClassFunction_?都是未定义的,因为它们应该绑定(bind)到类的实例,例如 myInstance.MyClassFunction_?。

那么如何在 if 语句中很好地完成这一点呢?

最佳答案

你可以这样做:

var funcUse =
    val === 0 ? 'MyClassFunction_1' :
    val === 1 ? 'MyClassFunction_2' :
    'MyClassFunction_3';

if (myInstance[funcUse] && myInstance[funcUse](arg)) {
    ...
}

点符号 (obj.property) 只是 obj["property"] 的语法糖,因此您可以简单地使 funcUse 成为字符串。


或者,您也可以这样做:

var funcUse =
    val === 0 ? myInstance.MyClassFunction_1 :
    val === 1 ? myInstance.MyClassFunction_2 :
    myInstance.MyClassFunction_3;

if (funcUse && funcUse.call(myInstance, arg)) {
    ...
}

这从 myInstance 对象中提取函数,但是您必须小心调用 funcUse 以确保 myInstance 被传递为这个

关于Javascript 类 - 即时访问函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37900981/

相关文章:

javascript - JS窗口宽度html5视频元素响应

class - Coq:定义类型类实例

C++ 类型 "SnakeHead(*)()"的值不能用于初始化类型 "SnakeHead*"的实体

c++ - 简单,但找不到 : syntax to work with member variables of STL queues with type class

c++ - 对于模板类,非泛型成员函数是否会被复制?

javascript - 自定义谷歌地图信息窗口

javascript - 使用 crypto 模块进行 Node.js MD5 解密

Javascript 类 "Object #<HTMLInputElement> has no method ' 添加标签'"

c++ - 矩阵类实验中的编译错误 - "expected initializer before ‘.’ token ”

javascript - Ajax请求不发送数据到php页面但登录控制台正常