在ASP.NET ajax库中,有一行让我感到困惑。
Type.prototype.registerClass = function Type$registerClass(typeName, baseType, interfaceTypes) {
//..
this.prototype.constructor = this;
//..
}
我知道(this.prototype.constructor === this) == true
,那么这条线的意义何在?我删除该行,并使用一些代码测试库。看来没关系。这条线的目的是什么?
答案 0 :(得分:1)
我不熟悉asp.net libs,但是:
Javascript中的常见模式,特别是在尝试模拟基于类的系统时,是将原型对象重新分配给另一个对象的实例,而不是仅仅向JS提供的原型对象添加属性。这个问题的一个问题是它给你错误的构造函数 - 除非重置一个'正确'值。
答案 1 :(得分:1)
我的猜测是,在this.prototype.constructor = this;
之前的某个时刻,某个对象被分配给了原型属性,后者覆盖了prototype.constructor
。这个技巧通常在轻松继承对象原型时使用,但仍然可以调用instanceof
来查看对象实例是否属于某种类型。
在这种情况下很难说出比这更具体的内容和一个严重的问题,但它可能对某些人有用。