在Javascript中按名称(字符串)返回私有对象属性

时间:2014-05-05 22:03:56

标签: javascript

我通过创建一个返回这些属性的方法,找到了一个访问对象私有属性的方法。但是我想创建一个函数,它可以根据传递的字符串参数返回任何对象属性。

这是我想要做的一个例子:

function MyObj() {

    var myProp = 10;

    this.getProp = function( propName ) {

        return( propName ); // THIS IS WHERE I AM STUCK

    };


}

MyObj.prototype.getMyProp = function() {

    return this.getProp( 'myProp' );

};

var myObj = new MyObj();

console.log( myObj.getMyProp() );

从这个例子可以看出字符串" myProp"返回的不是变量。我无法使用此[propName],因为我没有在正确的范围内,我无法使用该/ self技术访问范围。

如何使用字符串返回对象属性?

1 个答案:

答案 0 :(得分:3)

一个简单的解决方案是将私有变量包装在这样的对象中:

function MyObj() {
    var privateVars = {
        myProp: 10
    };

    this.getProp = function( propName ) {
        return privateVars[propName];
    };
}

MyObj.prototype.getMyProp = function() {
    return this.getProp( 'myProp' );
};

var myObj = new MyObj();

console.log( myObj.getMyProp() ); // 10

更新eval似乎也适用于这种情况,但我不推荐它:

function MyObj() {
    var myProp = 10;

    this.getProp = function( propName ) {
        return eval(propName);
    };
}

MyObj.prototype.getMyProp = function() {
    return this.getProp( 'myProp' );
};

var myObj = new MyObj();

console.log( myObj.getMyProp() ); // 10