1

这个对象是否有它的上下文:

{}

如果是,那么它还必须有 VO(Variable Object)。所以,当我这样做时:

foo={
    name:"Maizere",
    height:function () {console.log(name);}//output is undefined
 }

  foo.height();

当 height() 方法运行时,js 首先检查函数上下文,因为它找不到该名称,它会移动到下一个,即父上下文 Vo,这里父上下文是文字对象的上下文,因为该名称位于该 VO 中,为什么我得到未定义?

该属性如何仅作为属性或简单地像变量一样驻留在文字对象上下文的VO中,我需要一个完整的解释。谢谢@all。

4

3 回答 3

3

您将调用上下文(使用this关键字)与变量 scope和对象属性混淆了。

回答您的问题:,对象没有范围。只有函数具有作用域属性,当它们被调用时,它将初始化其变量对象的作用域链。name由于在您的函数范围内没有具有名称的变量height,因此它解析为undefined(甚至是引用错误)。

于 2013-08-04T17:50:52.230 回答
2

对象成员通过当前对象引用this

height: function() { console.log( this.name ); }
//                                ^^^^
于 2013-08-04T17:48:59.903 回答
1

看起来您想要this关键字,并且名称行上有一个小的SyntaxError(您想要一个但是写的)。,;

var foo = {
        name: "Maizere",
        height: function () {
            console.log(this.name);
        }
    };

foo.height(); // "Maizere"
于 2013-08-04T17:48:51.250 回答