这个对象有它的上下文:
{}
如果是的话,它还必须有VO(可变对象)。所以,当我这样做时:
foo={
name:"Maizere",
height:function () {console.log(name);}//output is undefined
}
foo.height();
当高度()方法运行时,js首先检查函数上下文,因为它无法找到该名称,它会转到下一个即父上下文Vo,这里父上下文是文字对象的上下文,因为该名称位于VO为什么我得到未定义?
该属性如何仅仅作为属性或简单地像变量一样驻留在文字对象上下文的VO中,我需要一个完整的解释。谢谢你@all。
答案 0 :(得分:3)
您将调用上下文(使用this
keyword)与变量范围以及对象属性混淆。
要回答您的问题:否,对象没有范围。只有函数有一个scope属性,它会在调用变量对象时初始化它们的作用域链。由于name
函数范围内没有名称为height
的变量,因此它会解析为undefined
(甚至是参考错误)。
答案 1 :(得分:1)
看起来你想要this
关键字,并且 name 行上有一个小的 SyntaxError (你想要一个,
但是写了;
)。
var foo = {
name: "Maizere",
height: function () {
console.log(this.name);
}
};
foo.height(); // "Maizere"
答案 2 :(得分:1)
使用this
:
height: function() { console.log( this.name ); }
// ^^^^