可以使用JavaScript方法来处理未定义的属性吗?

时间:2014-04-23 21:08:11

标签: javascript object properties v8

什么有效:

拥有一个像JavaScript这样的JavaScript对象。

var obj = {
    var1: "one"
};

我可以通过以下方式之一来称呼它:

console.log(obj.var1);
console.log(obj['var1']);   

失败的原因:

这个会失败:

console.log(obj.var2);

因为var2不是匿名对象的属性/变量,因此在控制台日志中打印undefined

我的目标:

我希望有一个后备函数,当找不到匹配的属性/变量时会自动调用。

E.g。类似的东西:

var obj = {
    var1: "one",
    __propertyNotFound__: function (name) {
        if ( name=="var2" ) return "two";
        else return null;
    }
};

不幸的是我找不到任何紧密的解决方案。

我的问题:

作为一个相当JavaScript的新手,我的问题是一个愚蠢的问题和完全错误的方法或可能它是否有意义并且实际上是否有解决方案来解决这个问题?

2 个答案:

答案 0 :(得分:3)

嗯,不会真的自动,但你可以这样做:

var obj={
    a:2,
    b:5,
    get:function(index){
        if(this.hasOwnProperty(index)){
            return this[index];
        }else{
            return this.notFound(index);
        } 
    },
    notFound:function(index){
        if ( index=="var2" ) return "two";
        else return null;
    }
}

console.log(obj.get('var2')) // two

您必须使用.get来访问属性,但是您可以使用这种方式找不到

答案 1 :(得分:1)

当您尝试检索其值时,不是直接引用该属性,而是实现一个getter函数,该函数将能够返回请求的属性,并在您请求未定义的属性时执行任何所需的操作。