Set undefined javascript property before read

后端 未结 3 405
执笔经年
执笔经年 2020-11-29 13:20
var tr={};
tr.SomeThing=\'SomeThingElse\';
console.log(tr.SomeThing); // SomeThingElse
console.log(tr.Other); // undefined

tr.get=function(what){
    if (tr.hasOwnP         


        
相关标签:
3条回答
  • 2020-11-29 13:37

    You could define a getter for your property.

    0 讨论(0)
  • 2020-11-29 13:45

    Three solutions:

    • Implement your object as a Proxy, 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 It was standardised with ES6, but might not yet be available in all environments.

    • Always fill your translation object with a complete set of messages. When creating that "dictionary" (serverside or clientside), always include all needed keys. If no translation exists, you can use a fallback language, the message's name or the string representation of undefined - your choice.

      But a non-existing property should always mean "there is no such message" instead of "no translation available".

    • Use a getter function with a string parameter instead of object properties. That function can look the messages up in an internal dictionary object, and handle misses programmatically.

      I would recommend a map object which is different from the dictionary, to allow "get" and co as message names:

    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; }
        };
    })();
    
    0 讨论(0)
  • 2020-11-29 13:49

    While this solution isn't exactly what you were looking for, a JavaScript implementation of python's collections.defaultdict class might help:

    var collections = require('pycollections');
    var dd = new collections.DefaultDict([].constructor);
    console.log(dd.get('missing'));  // []
    dd.get(123).push('yay!');
    console.log(dd.items()); // [['missing', []], [123, ['yay!']]]
    
    0 讨论(0)
提交回复
热议问题