考虑 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]
我对此有些困惑,这是怎么回事?类声明是否像其他变量一样受范围限制?还是由每个 vendor 按照自己的意愿实现?
最佳答案
JavaScript 中没有类和实例,只有原型(prototype)和构造函数函数(了解差异 here )。它们遵循与任何其他对象相同的范围规则。因此,构造函数 InnerClass
本身在 ÒuterClass
之外不可用,但返回的“实例”知道其原型(prototype),浏览器可能会或可能不会记录它。
关于javascript - 类声明是否受 JavaScript 范围的约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14676405/