javascript对象方法如何引用尚未声明的变量?

时间:2018-11-04 13:51:31

标签: javascript

我正在阅读此js tutorial,在Def. 5: Class部分中有一个代码段:

// Generic prototype for all letters.
let letter = {
  getNumber() {
    return this.number;
  }
};

我想知道getNumber方法如何引用未声明的number

2 个答案:

答案 0 :(得分:2)

number不是变量,而是属性。您不必声明属性(实际上,直到class fields proposal进展到[它现在位于Stage 3]之前,您不能声明属性;没有属性声明语法,只是属性初始化语法)。变量是存储在对象外部。¹属性是存储在对象内部。

如果您想知道getNumber在创建属性之前如何使用该属性,那是因为这就是JavaScript的定义方式:尝试获取不存在的属性的值会导致值{{ 1}},不是错误。


¹“ ...在对象外部。” 至少就您的代码而言。用规范术语来说,变量是词法环境对象中的绑定(与属性非常相似),但这是规范,而不是您可以直接在代码中使用的东西。

答案 1 :(得分:1)

在您的代码中,this.numberletter.number(未定义)。而且,这意味着它被评估为undefined

var obj = {};
obj.number; // undefined