这是我正在尝试做的 - 这是伪代码,不起作用.有谁知道如何实现这一目标:
// Define the class
MyClass = Class.extend({});
// Store the class name in a string
var classNameString = 'MyClass';
// Instantiate the object using the class name string
var myObject = new classNameString();
Run Code Online (Sandbox Code Playgroud) 在JavaScript中,var声明在全局对象上创建属性:
var x = 15;
console.log(window.x); // logs 15 in browser
console.log(global.x); // logs 15 in Node.js
Run Code Online (Sandbox Code Playgroud)
ES6引入let了具有块范围的声明的词法作用域.
let x = 15;
{
let x = 14;
}
console.log(x); // logs 15;
Run Code Online (Sandbox Code Playgroud)
但是,这些声明是否在全局对象上创建属性?
let x = 15;
// what is this supposed to log in the browser according to ES6?
console.log(window.x); // 15 in Firefox
console.log(global.x); // undefined in Node.js with flag
Run Code Online (Sandbox Code Playgroud) 我想使用ES6创建对象工厂,但旧式语法不适用于新的.
我有下一个代码:
export class Column {}
export class Sequence {}
export class Checkbox {}
export class ColumnFactory {
constructor() {
this.specColumn = {
__default: 'Column',
__sequence: 'Sequence',
__checkbox: 'Checkbox'
};
}
create(name) {
let className = this.specColumn[name] ? this.specColumn[name] : this.specColumn['__default'];
return new window[className](name); // this line throw error
}
}
let factory = new ColumnFactory();
let column = factory.create('userName');
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
在ES5中,我可以检查window对象上是否存在"类"(构造函数):
if (window.MyClass) {
... // do something
}
Run Code Online (Sandbox Code Playgroud)
在ES6中,根据本文,全局声明的类是全局变量,但不是全局对象的属性(window在浏览器上):
但是现在还有全局变量不是全局对象的属性.在全局范围内,以下声明会创建此类变量:
let声明const声明- 类声明
所以,如果我不能使用if (window.MyClass),有没有办法做同样的事情?
实际上有没有一个正确的方法来做到这一点,而不使用窗口对象?