在读取之前设置未定义的 javascript 属性

2024-05-07

var tr={};
tr.SomeThing='SomeThingElse';
console.log(tr.SomeThing); // SomeThingElse
console.log(tr.Other); // undefined

tr.get=function(what){
    if (tr.hasOwnProperty(what)) return tr[what];
    else return what;
};
tr.get('SomeThing') // SomeThingElse
tr.get('Other') // Other

有没有办法让 tr.Other 或 tr['Other'] 以及对象的所有其他未定义属性返回其名称而不是未定义?


三种解决方案:

  • Implement your object as a Proxy http://wiki.ecmascript.org/doku.php?id=harmony:proxies, which is designed to do exactly what you want. Yet, it is only a draft and currently only supported in Firefox' Javascript 1.8.5 https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Proxy It was standardised with ES6, but might not yet be available in all environments.

  • 始终用一组完整的消息填充您的翻译对象。创建“字典”(服务器端或客户端)时,请始终包含所有需要的键。如果不存在翻译,您可以使用后备语言、消息的名称或字符串表示形式undefined- 你的选择。

    但不存在的属性应该始终意味着“没有这样的消息”,而不是“没有可用的翻译”。

  • 使用带有字符串参数的 getter 函数而不是对象属性。该函数可以在内部字典对象中查找消息,并以编程方式处理未命中的消息。

    我会推荐一个与字典不同的地图对象,以允许“get”和 co 作为消息名称:

var translate = (function(){
    var dict = {
        something: "somethingelse",
        ...
    };
    return {
        exists: function(name) { return name in dict; },
        get: function(name) { return this.exists(name) ? dict[name] : "undefined"; },
        set: function(name, msg) { dict[name] = msg; }
    };
})();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在读取之前设置未定义的 javascript 属性 的相关文章

随机推荐