Q: ES6을 사용하여 객체 팩토리를 생성하려고 하는데 이전 버전 -style 구문은 새로운 구문에서 작동하지 않습니다. 다음 코드가 있습니다.
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 throws an error } } let factory = new ColumnFactory(); let column = factory.create('userName');
내가 뭘 잘못하고 있나요?
A: 객체에 클래스 이름을 넣을 필요가 없습니다. 대신 클래스 자체를 거기에 배치하여 클래스가 전역적이고 창 개체를 통해 (브라우저에서) 액세스할 수 있다고 의존할 필요가 없습니다.
또한 팩토리를 클래스로 만들 이유가 없습니다. 아마도 한 번만 인스턴스화할 것입니다(싱글톤). 대신 객체로 만들 수 있습니다:
export class Column {} export class Sequence {} export class Checkbox {} export const columnFactory = { specColumn: { __default: Column, // <-- __sequence: Sequence, // <-- __checkbox: Checkbox // <-- }, create(name, ...args) { let cls = this.specColumn[name] || this.specColumn.__default; return new cls(...args); } };
위 내용은 ES6를 사용하여 JavaScript의 클래스 이름에서 개체를 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!