对构造函数的引用
a reference to the constructor function
如何获得对typescript中任何对象的构造函数的引用?
JavaScript中的示例:
var anyObject = new this.constructor(options);
或
var anyObject = new someObj.constructor(options);
或
class Greeter {
greeting: string;
constructor(message: string, options: any) {
this.options = options;
this.greeting = message;
} greet() {
return "Hello, " + this.greeting;
} createAnyObj(){
return new this.constructor(this.options);
}
}
var t= new Greeter('mes',{param1: 'val1'});
var b=t.createAnyObj();
谢谢。
更多示例:
>>>链接到打字游戏场
您可以使用以下代码实现所需的功能:
class A {
constructor(public options: any) {
}
duplicate() {
return new A(this.options);
}
someMethod() {
return 'Hello! I am class A!';
}
}
class B extends A {
constructor(options: any) {
super(options);
}
someMethod() {
return 'This is class B!';
}
duplicate() : A {
return new B(this.options);
}
}
var objA = new A({key1: 'value1'});
var objWhithOptionsObjA = objA.duplicate(); //=> Instaceof class A
alert(objWhithOptionsObjA.someMethod());
var objB = new B({key2: 'value2'});
var objWhithOptionsObjB = objB.duplicate(); //=> Instaceof class B
alert(objWhithOptionsObjB.someMethod());
B
上需要一个构造函数,它只将选项传递给超类。您可以重写重复方法以返回B
,它是A
的子类型。
下一个解决方案解决了这个问题:
module Example{
// Thank you, JavaScript!
export function getConstructor(obj){
return obj.constructor;
}
export class A{
constructor(private options: any){}
dublicate(){
return new (getConstructor(this))(this.options);
}
someMethod(){
return 'This is class A';
}
}
export class B extends A{
someMethod(){
return 'This is class B';
}
}
}
// Class A
var objA = new Example.A({key1: 'val1'});
console.log(objA.someMethod(), objA); //=> This is class A
var objA2 = objA.dublicate();
console.log(objA2.someMethod(), objA2); //=> This is class A
// Class B
var objB = new Example.B({key2: 'val2'});
console.log(objB.someMethod(), objB); //=> This is class B
var objB2 = objB.dublicate();
console.log(objB2.someMethod(), objB2); //=> This is class B
实例=>开放式操场
使用new
运算符在构造函数中使用所需参数实例化对象。这与您在其他面向对象编程语言中的操作方式类似,下面是typescript官方网站的一个示例
class Greeter {
constructor(public message: string, public options?: any) {
}
greet() {
return "Hello, " + this.message;
}
createAnyObj(){
return new Greeter(this.message, this.options);
}
}
var greeter = new Greeter("world");
相关文章:
- ES6构造函数返回基类的实例
- 使用Google Visualization动态调用构造函数
- javascript中对象构造函数中的var属性与this.properties
- 理解typescript中的构造函数接口
- 如何将对象引用传递到 mootools 中另一个对象的构造函数中
- 对使用函数构造函数创建的函数的内部引用
- 在挖空中引用对象构造函数外部视图模型的属性
- Javascript:将构造函数作为变量中的引用传递并调用此构造函数
- 在JavaScript中引用子构造函数中的父构造函数属性
- 构造函数中未定义对原型函数的javascript引用
- 使用原型从构造函数引用变量
- Javascript 构造函数,使用引用其他变量的外部变量进行闭包
- 构造函数函数.可以't覆盖对全局变量的引用
- 正在原型构造函数中创建对象引用
- Chrome如何管理对javascript构造函数的引用
- 作为对象属性调用函数时如何引用构造函数方法
- 对构造函数中当前对象的引用
- 从构造函数中引用Javascript实例变量而不使用'this'关键字
- 获取对包含构造函数属性的对象的引用
- 对构造函数的引用