javascript:将变量定义为像魔术定位器一样的对象

时间:2014-03-16 16:07:58

标签: javascript object setter

我正在尝试将一些变量设置为一个对象。但我希望它像下面的代码一样设置 有没有办法设置这样的变量?

myObject = {};

myObject.save = function (var) {
  console.log(var);
}

myObject.users.save(); // must output 'users';
myObject.fruits.save(); // output fruit;

save方法只是一个示例方法。这意味着我需要在变量字符串上链接一个方法。

我试图实现类似的目标。 任何想法如何实现? 感谢

2 个答案:

答案 0 :(得分:1)

您可以为Listusers列表创建fruits课程,并提供常规列表方法,例如addremove,{{1}使其实际上像列表类一样,并将save方法定义为原型方法:

size

然后你可以在你的对象中使用它,如:

var List = (function(){

    function List(listType){
        this.listType = listType;
        this._list = [];
    }

    List.prototype.add = function(item){
        this._list.push(item);
    };

    List.prototype.size = function(item){
        return this._list.length;
    };

    List.prototype.save = function(item){
        console.log(this.listType);
    };

    return List;

})();

现在你可以实际调用这两行代码:

var myObject = {};
myObject.users = new List("users");
myObject.fruits  = new List("fruits");

您还可以为myObject.users.save(); // output 'users'; myObject.fruits.save(); // output 'fruits'; 定义一个保存方法,并实际调用列表保存方法:

myObject

并称之为:

myObject.save = function(listType){
    if(myObject[listType] instanceof List){
        myObject[listType].save();
    }
    else{
        console.log("there is no such a list named : " + listType);
    }
};

答案 1 :(得分:0)

你可以这样做

var obj = {
    users: {
        save: function () {
            console.log('Users');
        }
    },

    fruits: {
        save: function () {
            console.log('Fruits');
        }
    },
}

(or)

var obj = {};
obj.users = {};
obj.users.save = function () {
            console.log('Users');
        };
obj.fruits = {};
obj.fruits.save = function () {
            console.log('Fruits');
        };