0

据我了解,以下陈述是相等的

  • 对象属性
  • 对象[“属性”]

所以,我一直在做一些测试,但我不知道如何使点符号为 functionP 正确工作。

我通常在此页面的某处使用转储工具screendump来查看发生了什么,但它并没有显示它看起来的函数的属性。

为什么我可以这样做

alert(functionE());     // returns key and date
alert(functionE.keyE);  // returns key and date

function functionE()
{
    var myKey = "keyE";

    functionE[myKey] = myKey + " +++ " + Date();
    return functionE[myKey];
}

但不是这个

alert(functionP());     // returns key and date
alert(functionP.keyP);  // RETURNS UNDEFINED

function functionP()
{
    var myKey = "keyP";

    functionP.myKey = myKey + " +++ " + Date();
    return functionP.myKey;
}

虽然我可以做到这一点

alert(functionT());     // returns key and date
alert(functionT.keyT);  // returns key and date

function functionT()
{
    functionT.keyT = "keyT" + " +++ " + Date();
    return functionT.keyT;
}
4

1 回答 1

4

因为functionP.myKey等于functionP['myKey'],不是functionP[myKey]

functionE是做你想做的事情的正确方法。

但是,您可以执行以下操作:

function functionX() {
    var key = 'keyP';
    var value = 'foo';

    this.__defineGetter__(key, function() {
        return value;
    });

    this.__defineSetter__(key, function(val) {
        value = val;
    });
}

现在它起作用了:

> var o = new functionX()
> o.keyP
"foo"

__defineGetter__并且__defineSetter__不是标准的 JavaScript,所以我不会使用它们。使用functionE.

于 2013-04-24T19:30:46.350 回答