【问题标题】:how do I map var myKey = "keyP" to functionP.myKey如何将 var myKey = "keyP" 映射到 functionP.myKey
【发布时间】:2013-04-24 19:26:14
【问题描述】:

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

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

所以,我一直在做一些测试,但我不知道如何使点符号为 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;
}

【问题讨论】:

    标签: javascript function syntax properties key


    【解决方案1】:

    因为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

    【讨论】:

      猜你喜欢
      • 2021-12-20
      • 1970-01-01
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-12
      相关资源
      最近更新 更多