Javascript 在JS中,这个默认属性和类型类似于对象的数据结构是什么?
我注意到在一些JS对象中,它们的属性具有一些特殊的行为。例如,Sequelize中的模型对象,如果我将模型记录到控制台,我会看到该对象包含诸如Javascript 在JS中,这个默认属性和类型类似于对象的数据结构是什么?,javascript,node.js,data-structures,Javascript,Node.js,Data Structures,我注意到在一些JS对象中,它们的属性具有一些特殊的行为。例如,Sequelize中的模型对象,如果我将模型记录到控制台,我会看到该对象包含诸如\u data、\u changed、\u modelOptions等属性 但是,当访问对象本身时,\u data属性似乎是其默认属性。例如: const userModel = UserModel.findOne(...); console.log(userModel.email); // this prints the email field of
\u data
、\u changed
、\u modelOptions
等属性
但是,当访问对象本身时,\u data
属性似乎是其默认属性。例如:
const userModel = UserModel.findOne(...);
console.log(userModel.email); // this prints the email field of the record
console.log(userModel._data.dataValues.email) // this also prints the email of the record
似乎我不必从\u data.dataValues
访问电子邮件。我可以直接从userModel
对象访问它
当我打印整个对象时,我还注意到\u data.dataValues
中的值被打印出来
为此:
console.log(JSON.stringify(userModel))
我将得到以下结果:
{
name: 'John',
email: 'john@smith.com'
}
但有了这一点:
console.log(userModel)
我会得到这个:
t {
_data: user { // what is that 'user' before the object? is it a type definition?
dataValues: {
name: 'John',
email: 'john@smith.com'
}
_previousDataValues: {
name: 'John',
email: 'john@smith.com'
}
_modelOptions: {
...
}
...
}
}
这看起来有点不同于通常的JS对象,因为它似乎对对象有一种“类型”排序,这些属性是“内部”的,打印出来时不可见
起初我以为它是一个类,但我试着打印我创建的一个类,并将输出与这个模型的控制台输出进行比较,它们看起来不同
我不经常在JS中看到这种数据结构。JS和Node中的数据结构是什么?与JS中的常规对象相比,这个“特殊”对象有什么不同和有用之处?实现这些行为形式并不特别。这可以使用或轻松完成
这里有一个例子
职能人员(fName,lName){
这是一个数据={
fName:fName,
lName:lName
}
对象。定义属性(此{
fName:{
get:function(){
返回此。\u data.fName;
},
设置:函数(值){
这是。_data.fName=值;
}
},
名称:{
get:function(){
返回此。\u data.lName;
},
设置:函数(值){
这是。_data.lName=值;
}
}
});
}
const ratul=新人(“ratul”、“sharker”);
控制台日志(ratul);
console.log(ratul.fName);
ratul.fName=“Ra2l”;
console.log(ratul.fName)
可能是对象是其实例的类的指示-例如,调用了一个类用户
,并将结果分配给\u data
属性,这是我的猜测JSON。stringify(user)
将打印user.toJSON()
的结果,它可以返回任何想要的结果。