javascript中对象的属性访问器
如中所述,属性名称必须是字符串 对于代码javascript中对象的属性访问器,javascript,Javascript,如中所述,属性名称必须是字符串 对于代码 var foo = {unique_prop: 1}, obj = {}; obj[foo] = 'value'; console.log(obj[foo]); 它说, 在SpiderMonkey JavaScript引擎中,该字符串应为“['object']” 对象类型obj的属性(字符串文字)是如何存储的 属性是否存储为“”['unique_prop 1']”“?当您从变量在对象上创建属性时,JS引擎会对传递的值调用toString()方法。键的实
var foo = {unique_prop: 1}, obj = {};
obj[foo] = 'value';
console.log(obj[foo]);
它说,
在SpiderMonkey JavaScript引擎中,该字符串应为“['object']”
对象类型obj
的属性(字符串文字)是如何存储的
属性是否存储为“
”['unique_prop 1']”“
?当您从变量在对象上创建属性时,JS引擎会对传递的值调用toString()
方法。键的实际值已确定
您可以自己检查这种行为:
var foo={};
foo.toString=函数(){
返回“toString”;
}
var bar={};
条形图[foo]=“道具值”;
用于(以巴为单位的变量k){
控制台日志(k);
}
只需记录obj
,您就会看到(按键将是[object object]
)。@Teemuconsole.log(object)代码>,显示,对象{[Object Object]:“value”}
是的,在那里可以看到键:[Object Object]
,而不是['unique_prop 1']
。我误解你的问题了吗?@Teemu Ifbar={unique\u prop:2}
然后我需要在obj
中插入第二项,并将bar
作为属性?属性会是什么样子?您不能,它会覆盖第一个,因为它具有相同的键,即,这只是一个重新分配。当您说foo.toString
时,您是否覆盖Object.toString()
?是不是foo.prototype.toString
?@overexchange:不是,是foo.toString()
。只有函数具有prototype
属性,因为函数可以用作构造函数。对象没有prototype
属性,但它们有原型(它们的构造函数的prototype
属性)。对象是一个函数。