JavaScript对象和设置变量

Mas*_*erT -3 javascript oop

我有这样一个对象:

var MyObject = {
    item_1: 15000,
    item_2: new Array(),
    item_3: new Array(),
    init : function() {

    }
}
Run Code Online (Sandbox Code Playgroud)

我知道有一种方法可以循环遍历init函数检查中设置的变量,以查看该项是否是当时设置的值.如果没有,那就做一个.

所以当我输入这样的东西时

MyObject.init({
    item_1: 200,
    item_2:{
        item_a: "value"
    },
    item_3:{
        item_y:"value",
        item_z:"value"
    }
});
Run Code Online (Sandbox Code Playgroud)

然后遍历参数然后设置值.

Rya*_*yan 5

首先,你的语法是错误的.

var = MyObject{}
Run Code Online (Sandbox Code Playgroud)

应该:

var MyObject = {}
Run Code Online (Sandbox Code Playgroud)

其次,您的密钥中不能有空格(除非您将密钥括在引号中),因此:

item 1 : 15000,
...
Run Code Online (Sandbox Code Playgroud)

应该:

item_1: 15000,
...
Run Code Online (Sandbox Code Playgroud)

(但看起来有人在编辑中修复了这个问题.)

第三,你过于复杂了.如果你真的想循环通过对象内的属性,你可以这样做:

for (key in MyObject){
    if (MyObject.hasOwnProperty(key)){
        if (key == item_1){
            key = 200;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但正如您所看到的,如果您使用循环,则必须对每个键进行检查,以确保为正确的键分配正确的值.这是因为JavaScript不保证向您返回属性的顺序.

但是你可以这样做:

var MyObject = {
    item_1: 15000,
    item_2: new Array(),
    item_3: new Array(),
    init : function(item_1,item_2, item_3){
        item_1 = item_1;
        item_2 = item_2;
        item_3 = item_3;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后这样做:

MyObjectMyObject.init(
   item_1 = 200, 
   item_2 = {item_a: "value"}, 
   item_3 = {item_y:"value", item_z:"value"}
);
Run Code Online (Sandbox Code Playgroud)