如何将var myKey =“key”映射到function.myKey

时间:2013-04-24 19:26:14

标签: javascript function syntax properties key

据我所知,以下陈述相同

  • object.property
  • 对象[ “属性”]

所以,我一直在做一些测试,我无法弄清楚如何使dot符号正确地用于functionP。

我通常使用转储工具 screendump somewhere on this page 来查看正在发生的事情,但它没有显示看似函数的属性。

为什么我可以这样做

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

1 个答案:

答案 0 :(得分: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