Open kennyd98 opened 7 years ago
new.target
new
undefined
Object.setPrototypeOf
__proto__
class CustomError extends Error { constructor(message?: string) { super(message); // 'Error' breaks prototype chain here Object.setPrototypeOf(this, new.target.prototype); // restore prototype chain } }
generated JS
var CustomError = (function (_super) { __extends(CustomError, _super); function CustomError() { var _newTarget = this.constructor; var _this = _super.apply(this, arguments); // 'Error' breaks prototype chain here _this.__proto__ = _newTarget.prototype; // restore prototype chain return _this; } return CustomError; })(Error);
function
function f() { if (new.target) { /* called via 'new' */ } }
function f() { var _newTarget = this && this instanceof f ? this.constructor : void 0; if (_newTarget) { /* called via 'new' */ } }
new.target
new
로 인스턴스가 생성될 때,new.target
은 생성자 함수를 가리킴new
로 로 생성되지 않고, 단순 함수 호출일 경우new.target
은undefined
Object.setPrototypeOf
또는__proto__
가 클래스 생성자에서 사용될 때new.target
이 유용함generated JS
function
을 사용하여 클래스를 작성할 때도 유용하게 사용할 수 있다.generated JS