Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript:将变量定义为对象,就像魔法设定器一样_Javascript_Object_Setter - Fatal编程技术网

javascript:将变量定义为对象,就像魔法设定器一样

javascript:将变量定义为对象,就像魔法设定器一样,javascript,object,setter,Javascript,Object,Setter,我正在尝试为一个对象设置一些变量。但我希望它像下面的代码一样设置 有没有办法设置这样的变量 myObject = {}; myObject.save = function (var) { console.log(var); } myObject.users.save(); // must output 'users'; myObject.fruits.save(); // output fruit; save方法只是一个示例方法。这意味着我需要在变量字符串上链接一个方法 我正在努力实现

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

myObject = {};

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

myObject.users.save(); // must output 'users';
myObject.fruits.save(); // output fruit;
save方法只是一个示例方法。这意味着我需要在变量字符串上链接一个方法

我正在努力实现这样的目标。 有什么办法可以做到这一点吗? 谢谢

你可以这样做

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');
        };

您可以为
用户
水果
列表创建一个
列表
类,并提供常规的列表方法,如
添加
删除
大小
等。使其实际上像一个列表类,并将您的保存方法定义为原型方法:

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);
    }
};
把它叫做:

myObject.save("users");
myObject.save("fruits");

不,没有,您不能使用不存在的属性,并且您没有
用户
水果
属性,如果您有,则
保存
方法仍然与这些属性没有任何关系。问题是我永远不知道属性将是什么。可能是,您可以解释上下文,以便我们能够清楚地理解问题。我正在构建文档存储系统和干净的用户友好api。我希望它像mongodb存储方法一样:db.users.save({name:'someone'});