对象构造函数 - 获取实例变量的名称

时间:2012-06-27 18:34:34

标签: javascript oop

我正在组合一个名为ListBox的JavaScript对象,它采用二维数组,并将其输出到具有固定列标题,可滚动内容的表中,并可通过单击列标题进行排序。为了使HTML包含调用对象自己的方法的事件处理程序,对象需要知道自己的实例变量名称,例如....

var MyList = new ListBox();

设置列和&内容适当的方法将生成HTML ...

...
<td class="ListBox_ColumnTitle" onclick="MyList.SortByColumn(1)">...</td>
...

通过在stackoverflow上搜索,我找到了以下代码,并稍微调整了一下,以便找到对象的正确实例:

for (var v in window) {
    try {
        if (window[v] instanceof ListBox) { InstanceName = v; break; }
        }
    catch (e) { }
    }

然而,这在构造函数内部不起作用 - 它根本找不到实例。它之后工作正常,但我希望能够在构造函数中完成它,使得使用ListBox的代码更简单 - 这可能吗?

此外,我确实认为将变量名称作为构造函数的参数传递会更简单,但如果可以的话,我想避免这种情况。

2 个答案:

答案 0 :(得分:2)

您可以通过在脚本中绑定事件而不输出onclick属性来完全避免此问题。

function ListBox() {
    var that = this;

    // do your existing stuff

    var element = ...; // whatever you're currently doing to create the html
    element.onclick = function () {
        that.SortByColumn(1);
    };
}

答案 1 :(得分:0)

不要这样做。切勿尝试get the name of a variable

相反,您应该使用对象和对它们的引用。您不应生成HTML(字符串),而应生成DOM元素(对象)。您可以轻松地将函数作为事件侦听器分配给它们,只有您可以在范围内访问它们。