2011-05-19 101 views
7

我需要在我的脚本申报了很多对象属性的,我不知道如果the're任何方式来缩短这个:在Javascript中声明空对象属性的速记,有没有?

Core.registry.taskItemSelected; 
Core.registry.taskItemSelected.id; 
Core.registry.taskItemSelected.name; 
Core.registry.taskItemSelected.parent; 
Core.registry.taskItemSelected.summary; 
Core.registry.taskItemSelected.description; 

回答

10

这样不是工作?

Core.registry.taskItemSelected = { 
    id: null, 
    name: null, 
    parent: null, 
    ... 
}; 
+0

啊......也许'null'应该被空字符串替换。嗯... – 2011-05-19 10:33:30

+0

有没有什么办法可以省略null,并像这样:Core.registry.taskItemSelected = {id,name,parent ...}; 或者这只是创建一个空值的数值属性? – Edward 2011-05-19 10:36:14

+0

简答:第 – 2011-05-19 10:37:41

1

像这样的东西应该工作:

var props = ["id", "name", "parent", ...]; 
Core.registry.taskItemSelected = {}; 
for (var i = 0; i < props.length; i++) 
    Core.registry.taskItemSelected[props[i]] = ""; 

编辑:下面的OP的意见,这里是更好的版本相同的最终结果:

Object.prototype.declare = function (varArray) { 
    for (var i = 0; i < varArray.length; i++) { 
     this[varArray[i]] = {}; 
    } 
}; 

//usage: 
var props = ["id", "name", "parent"]; 
Core = {}; 
Core.declare(props); 

和现场试验情况,以及: http://jsfiddle.net/5fRDc/

+0

我可以使用Object.prototype.declare = function ...来扩展Object对象,并让它接受var props = [....]这样的数组。然后我可能会像Core.registry.taskItemSelected.declare(道具)一样去设置正确的对象中的属性?使用 – Edward 2011-05-19 10:48:09

+0

对不起@爱德华,但我还没有(还)熟悉这些事情..但随时尝试它,以防万一它的作品让我知道。 – 2011-05-19 11:16:40

+0

@Edward你可以,但你可能想看看[Object.create](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/create)和[Object.defineProperties](https: //developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperties)而不是 – Zecc 2011-05-19 11:30:21