Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在typescript中(<;typeof className>;this.constructor)是什么意思?_Javascript_Typescript - Fatal编程技术网

Javascript 在typescript中(<;typeof className>;this.constructor)是什么意思?

Javascript 在typescript中(<;typeof className>;this.constructor)是什么意思?,javascript,typescript,Javascript,Typescript,当我看到jQTree()的源代码时,它是用Typescript编写的;我看到了: 导出默认类SimpleWidget{ 受保护的静态默认值={}; 公共选择:任何 受保护的$el:JQuery 构造函数(el:元素,选项:任意){ 这.$el=$(el); console.log(SimpleWidget的类型) 让默认值=(this.constructor).defaults; console.log(默认值) this.options=$.extend({},默认值,选项); } }该类将

当我看到jQTree()的源代码时,它是用Typescript编写的;我看到了:

导出默认类SimpleWidget{
受保护的静态默认值={};
公共选择:任何
受保护的$el:JQuery
构造函数(el:元素,选项:任意){
这.$el=$(el);
console.log(SimpleWidget的类型)
让默认值=(this.constructor).defaults;
console.log(默认值)
this.options=$.extend({},默认值,选项);
}

}
该类将编译为构造函数,并直接附加静态属性:

function SimpleWidget(el, options) { ... }

SimpleWidget.defaults = {};
子类将定义自己的
默认值

class DerivedWidget extends SimpleWidget {
  protected static defaults = { prop: 'derived default' };
}
这将编译为:

DerivedWidget.defaults = { prop: 'derived default' };

因此,父对象将希望访问子对象的静态默认值,如果访问
SimpleWidget.defaults
,则无法访问该静态默认值。但是它可以访问动态的
this.constructor.defaults

非常感谢。另一个问题是,这是什么意思?在我看来,“typeof SimpleWidget”只等于字符串“object”;但是当我编写this.constructor时,它不起作用。我相信这样做只是为了在访问静态默认属性时获得强类型。您无法执行
(this.constructor)。默认值为
,因为这意味着您要将构造函数强制转换为SimpleWidget的实例。实际上,您正试图将其强制转换为类本身(请记住-该类将编译为构造函数),这是通过
(this.constructor)完成的。默认值为
。这是从生成的JavaScript中编译出来的-只剩下
var defaults=This.constructor.defaults
。在typescriptlang.org/play上尝试一下。