javascript - 类声明是否受 JavaScript 范围的约束?

标签 javascript oop class scope

考虑 JavaScript 如何使用函数来确定变量的作用域,我开始思考以下示例中会发生什么:

var OuterClass = function () {

    var InnerClass = function () {
        this.foo = "bar";
    };

    this.getInstanceOfInner = function () {
        return new InnerClass();
    };

};

var instanceOfOuter = new OuterClass();
console.log(instanceOfOuter.getInstanceOfInner());

Fiddle of the above

在不同的浏览器中测试上述代码,结果有所不同:

  • Chrome:记录内部类的实例,并且似乎知道类声明。
  • Firefox:似乎记录了一个“无类型”对象,但具有正确的属性。
  • IE9:记录对象的字符串表示形式[object Object]

我对此有些困惑,这是怎么回事?类声明是否像其他变量一样受范围限制?还是由每个 vendor 按照自己的意愿实现?

最佳答案

JavaScript 中没有类和实例,只有原型(prototype)和构造函数函数(了解差异 here )。它们遵循与任何其他对象相同的范围规则。因此,构造函数 InnerClass 本身在 ÒuterClass 之外不可用,但返回的“实例”知道其原型(prototype),浏览器可能会或可能不会记录它。

关于javascript - 类声明是否受 JavaScript 范围的约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14676405/

相关文章:

c# - 日志记录类应该作为依赖项插入还是应该使用静态方法

Java:在最终类中实现接口(interface)的类

java - 能看懂java中的setter和getter

c++ - 如何使用类将歌曲添加到播放列表程序

javascript - 如何将数字数组映射到对象数组中的属性?

.net - VB.NET 中的默认属性?

javascript - JavaScript 中构造函数指针行为背后的基本原理是什么?

大型代码库中的 Javascript,将颜色设置为不可变?

javascript - 选择一个以某些内容结尾的 div

javascript - onClick如何存储元素的键值?