2

考虑到 JavaScript 如何使用函数来确定变量的范围,我开始考虑在以下示例的情况下会发生什么:

var OuterClass = function () {

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

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

};

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

上面的小提琴

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

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

我对此感到有些困惑,这里的交易是什么?类声明是否受作用域的影响,与其他变量一样吗?还是由每个供应商按自己的意愿实施?

4

1 回答 1

3

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

于 2013-02-03T19:54:05.353 回答