JavaScript';继承';:构造函数属性不正确

JavaScript';继承';:构造函数属性不正确,javascript,constructor,Javascript,Constructor,请帮助解释以下结果(在Firefox 3.6上测试)。为什么this.constructor指向一个内部原型,如果“this”显然是类型B?我有一种错觉,认为字典是从最顶层向下遍历原型链的,但这里的情况似乎不是这样: A=function() {} A.prototype.copy=function() { return new this.constructor(); } B=function() {} B.prototype=new A(); var b=new B(); var b

请帮助解释以下结果(在Firefox 3.6上测试)。为什么this.constructor指向一个内部原型,如果“this”显然是类型B?我有一种错觉,认为字典是从最顶层向下遍历原型链的,但这里的情况似乎不是这样:

A=function() {}  
A.prototype.copy=function() {
  return new this.constructor();
}
B=function() {}
B.prototype=new A();

var b=new B();
var bcopy=b.copy();
var cond1=bcopy.constructor==B // false
var cond2=bcopy.constructor==A // true
因此,您的
copy()
函数正在创建一个新的a。但是,如果您添加此行:

B.prototype.constructor = B;

…你会得到你期望的结果。

但是为什么b.constructor==A?那么谁把它分配给了A?当你分配了
B.prototype=newA()
您得到了一个对象,其
.constructor
属性指向
A
。因此,从
B
创建的所有“实例”都会查找并说,“您告诉我,我的构造函数是A,所以无论您何时询问,我都会报告它。”您需要将其设置回正确的值,因为您已对其进行了重击。请确认以下内容是否正确:最初,每个函数都有一个原型属性,它指向对象中只有一个东西:构造函数方法。所以,构造函数属性总是来自原型。若我们重新定义原型,我们必须将构造函数恢复到初始值。
B.prototype.constructor = B;