child class 的上限是什么?

what is upper scope of the child class?

我了解到,根据您定义函数的位置,您可以确定函数的上限范围。(static scopelexical scope

例子

class Parent {
  constructor(name){
    this.name = name
  }
}

class Child extends Parent {

}


在此,

what is the upper scope of the Child class? is it Parent class or global?

我觉得...

因为Childclass是在全局定义的,上层作用域是全局的。但是,

根据原型链,上层作用域似乎是Parent Class.

我错过了什么?

what is the upper scope of the Child class? is it Parent class or global?

这是全局范围。

because Child class is defined in global, upper scope is global

是的,完全正确。

According to prototype chain, it seems that upper scope is Parent Class

原型不代表范围。你在这里比较苹果和橘子。

原型是用于为从特定构造函数创建的所有对象定义公共属性的对象。示例:所有数组实例共享 Array.prototype.

中定义的方法

如果在对象中找不到特定的 属性,则遵循其原型 link 并在该原型对象中查找特定的 属性。

就作用域而言,如果在当前作用域中找不到特定标识符,则 Javascript 将在外部作用域中查找该标识符,对于 Child class 是全局作用域。

例子

下面的例子应该阐明作用域和原型之间的区别:

function foo(arr) {
   // ".forEach" method will be looked-up in the "Array.prototype"
   arr.forEach(n => console.log(n));  
   
   // "b" will be searched for in the outer scope, i.e. global scope
   console.log(b);  
} 

const numArr = [1, 2, 3];
foo(numArr);
  • 在上面的代码示例中,在foo函数范围内,arr存在于本地范围内;如果没有,javascript 会在外部范围内寻找 arr,即全局范围

  • 在下一行,标识符 b 不存在于函数 foo 的局部范围内;结果,javascript 将在外部范围内查找 b,即全局范围

  • 方法 forEach 将首先在 arr 对象上查找。如果 javascript 在 arr 对象中找不到任何名为 forEach 的 属性,它将在 arr 的原型中查找,即 Array.prototype