Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.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 Object.create()未完全创建;_Javascript_Node.js_Object - Fatal编程技术网

Javascript Object.create()未完全创建;

Javascript Object.create()未完全创建;,javascript,node.js,object,Javascript,Node.js,Object,代码如下: //Note: x actually isn't defined, I'm pulling it from an external source var x = [{ name: 'Michael Lovesllamas Lankford', created: 1338420951.11, laptop: 'pc', laptop_version: null, userid: '4fc6aed7eb35c14ad6000057', acl: 0, fans: 1, p

代码如下:

//Note: x actually isn't defined, I'm pulling it from an external source

var x = [{ name: 'Michael Lovesllamas Lankford',
 created: 1338420951.11,
 laptop: 'pc',
 laptop_version: null,
 userid: '4fc6aed7eb35c14ad6000057',
 acl: 0,
 fans: 1,
 points: 5,
 avatarid: 34 }]

global.UserBase = {
 userid: -1,
 name: "noidea",
 isSuperUser: false,
 isDJ: false,
 laptop: "pc",
 afkWarned: false,
 afkTime: Date.now(),
 droppedTime: null,
 droppedRoom: null,
 songCount: 0,
 mWaitingSongLimit: 0,
 totalSongCount: 0,
 totalHeartCount: 0,
 totalHeartsGiven: 0,
 customGreeting: null,
 bootAfterSong: false,
 joinedTime: Date.now(),
 whiteList: false,
 allowedToReserveSpot: true
};

global.mUsers = {length:0};

global.Register = function(a) {
 for(var i = 0; i < a.length; i++) {
  var sUser = a[i];
  mUsers[sUser.userid] = CreateUser(sUser);
  mUsers.length++;
 }
};

global.CreateUser = function(a) {
 var b = Object.create(UserBase);
 b.userid = a.userid;
 b.name = a.name;
 b.laptop = a.laptop;
 if (a.acl > 0) b.isSuperUser = true;
 return b;
};

Register(x);
它变成这样:

'4fc6aed7eb35c14ad6000057': { 
 userid: '4fc6aed7eb35c14ad6000057',
 name: 'Michael Lovesllamas Lankford',
 laptop: 'pc' 
}

知道为什么UserBase中的其余值没有添加到对象中吗?

UserBase
位于
global
对象上,您需要调用
Register
位于
global
对象上

global.CreateUser = function(a) {
 var b = Object.create(this.UserBase);
 b.userid = a.userid;
 b.name = a.name;
 b.laptop = a.laptop;
 if (a.acl > 0) b.isSuperUser = true;
 return b;
};

global.Register(x);

发生这种情况是因为您仅初始化 用户ID, 姓名和笔记本电脑。 查看您的代码:

b.userid = a.userid;
b.name = a.name;  
b.laptop = a.laptop; 
要获得所需的结果,需要调用Global.Register(x)而不是Register(x)

创建一个新对象,并将其
原型设置为传入的对象

您的对象正在初始化,但您只在新对象实例上显式设置了一些属性。原型对象(
UserBase
)的属性都可以访问,但是对象的直接
控制台.log
不会打印它们

例如,运行代码后,执行以下操作:

for(var p in mUsers['4fc6aed7eb35c14ad6000057']) {
  console.log(p, mUsers['4fc6aed7eb35c14ad6000057'][p]);
}
打印出:

userid 4fc6aed7eb35c14ad6000057
name Michael Lovesllamas Lankford
laptop pc
isSuperUser false
isDJ false
afkWarned false
afkTime 1340089066700
droppedTime null
droppedRoom null
songCount 0
mWaitingSongLimit 0
totalSongCount 0
totalHeartCount 0
totalHeartsGiven 0
customGreeting null
bootAfterSong false
joinedTime 1340089066700
whiteList false
allowedToReserveSpot true

好的,我刚测试过,它成功了。我真傻。但是,我仍然可以通过mUsers[var]访问它吗?例如,songCount?我想知道如果我把它保存到数据库,它将如何工作。(我使用couchdb存储这些对象)是的,您可以直接访问属性。尝试调用对象上的
JSON.stringify
,这可能就是您用来访问couchdb的任何东西都会用到的;b、 userid=userid;等等谢谢你的帮助!
userid 4fc6aed7eb35c14ad6000057
name Michael Lovesllamas Lankford
laptop pc
isSuperUser false
isDJ false
afkWarned false
afkTime 1340089066700
droppedTime null
droppedRoom null
songCount 0
mWaitingSongLimit 0
totalSongCount 0
totalHeartCount 0
totalHeartsGiven 0
customGreeting null
bootAfterSong false
joinedTime 1340089066700
whiteList false
allowedToReserveSpot true