打字稿覆盖构造函数中的扩展属性
Typescript overriding extended property within constructor
我在使用Typescript时遇到了问题,其中我扩展了一个类并覆盖了super的属性,但是当我实例化子类时,superclass属性仍然在构造函数中读取。请参阅以下示例:
class Person {
public type:string = 'Generic Person';
public constructor() {
console.log(this.type);
}
}
class Clown extends Person {
public type:string = 'Scary Clown';
}
var person = new Person(), // 'Generic Person'
clown = new Clown(); // 'Generic Person'
console.log(person.type); // 'Generic Person'
console.log(clown.type); // 'Scary Clown'
当我实例化小丑的实例时,我的预期行为将是"可怕的小丑"。有没有另一种方法可以实现这一点,而无需将值传递到构造函数本身或在实例化后手动触发某种 init 方法?
提前致谢:)
属性初始值设定项直接插入到构造函数的顶部,然后是手动输入的构造函数主体。所以
class Person {
public type:string = 'Generic Person';
public constructor() {
console.log(this.type);
}
}
成为
var Person = (function () {
function Person() {
this.type = 'Generic Person';
// NOTE: You want a different value for `type`
console.log(this.type);
}
return Person;
})();
如您所见,无法使用属性初始值设定项在父构造函数主体中获取不同的type
。
或者,不要使用 type
并依赖内置的 constructor
属性:
interface Function{name?:string;}
class Person {
public constructor() {
console.log(this.constructor.name);
}
}
class Clown extends Person {
}
var person = new Person(), // 'Person'
clown = new Clown(); // 'Clown'
console.log(person.constructor.name); // 'Person'
console.log(clown.constructor.name); // 'Clown'
相关文章:
- 未捕获的类型错误:无法读取属性'addEventListener'的null chrome扩展名
- 扩展expressjs-res属性
- 在css中设置负底部属性会扩展页面的底部
- 如何在ES Next中扩展静态属性
- “class”属性的值隐式扩展某些标记元素
- FabricJS CurvedText对象(扩展)在更新间距和文本属性时未显示
- jQuery深度扩展并保留所有属性
- 如何扩展EmberJS手柄输入助手以支持没有值的属性
- 如何使用子上下文可访问的自定义属性扩展模板绑定语法
- 扩展或定义新的dat.gui属性控制器的最佳方法
- 扩展 pixi.js在构造函数中对访问父的属性进行精灵化
- 自定义镶边扩展程序中的挂钩窗口属性
- 扩展类时继承而不是覆盖属性/方法
- 什么是保留在挖空扩展中创建的自定义属性的好模式
- 打字稿覆盖构造函数中的扩展属性
- 如何删除扩展属性“;jquery123456"来自元素
- Breeze扩展属性-如何在控制器阵列中引用
- 使用小于&扩展属性选择器比jQuery更大
- JS中的扩展属性
- 从JavaScript访问List类的扩展属性