按直接的理解,构造函数应该是new一个实例的时候被调用的,所以如果原型里定义了一个构造函数,那么之后的new操作,应该是去调用这个函数的。下面的代码,B的原型指向A的实例,所以它的构造函数也是指向function A(),但是new B()实际上还是调用function B()
function A()
{
    this.name = "A";
}function B()
{
    this.name = "B";
}B.prototype = new A();var b = new B();
alert(b.constructor); // 显示function A()
alert(b.name); // B;下面的代码,把B原型的构造函数指向C,但是new B()并没有调用function C()
function A()
{
    this.name = "A";
}function B()
{
    this.name = "B";
}function C()
{
    this.name = "C";
}B.prototype = new A();
B.prototype.constructor = C;var b = new B();
alert(b.constructor); // 显示function C()
alert(b.name); // B
所以问题就来了,这个prototype.constructor有什么作用?或者说,它什么时候会起作用?

解决方案 »

  1.   

    貌似是这样的:
    每一个函数对象A默认有一个原型对象A.prototype,而这个原型对象A.prototype上有一个默认的属性A.prototype.constructor是指向这个函数对象A的。A的实例的constructor属性,其实就是A的原型上的constructor属性,默认是A这个函数对象。function A()
    {
        this.name = "A";
    }
    alert(new A().constructor);所以,上面这段代码的结果是
    function A()
    {
        this.name = "A";
    }以你的第一段代码为例,
    B.prototype = new A();
    这句话改变了函数B的默认原型对象,B的新原型对象是构造函数A的一个实例,所以,b.constructor其实是A的实例的constructor属性,而A的实例的constructor属性,就是A的原型的constructor属性,即A这个函数对象。总结:在不改变构造函数原型的情况下,构造函数的实例的constructor属性指向构造函数对象。
      

  2.   

    对,constructor的关系可以理解,但问题是,这个constructor什么时候起作用?对构造函数本身,以及由构造函数产生的实例,会有什么影响?如果没有影响,那就只是一个参考值而已?
      

  3.   

    constructor属性指示创建当前对象的构造函数,而在继承中,经常会改变函数对象的原型,导致原型上默认的constructor属性改变,所以需要重新在原型上设置constructor属性,使其变回默认的值。      function sonFn() {     }
         function fatherFn() {     }
         sonFn.prototype = new fatherFn();
         //sonFn.prototype.constructor = sonFn;  //这句话将原型的constructor 设置回默认的 sonFn
         var newSonFn = new sonFn();
         alert(newSonFn.constructor);貌似这种场景一般在写js库的时候会经常用到。
    能力有限,只能帮你到这儿了...
      

  4.   

    constructor属性指示创建当前对象的构造函数,而在继承中,经常会改变函数对象的原型,导致原型上默认的constructor属性改变,所以需要重新在原型上设置constructor属性,使其变回默认的值。      function sonFn() {     }
         function fatherFn() {     }
         sonFn.prototype = new fatherFn();
         //sonFn.prototype.constructor = sonFn;  //这句话将原型的constructor 设置回默认的 sonFn
         var newSonFn = new sonFn();
         alert(newSonFn.constructor);貌似这种场景一般在写js库的时候会经常用到。
    能力有限,只能帮你到这儿了...
      

  5.   

    一属性,在我看来可有可无。相当于java里面的。this.getClass()     默认下,constructor就应该对应   构造函数(class).  其实你把它改的乱七八糟也没有影响的,因为他就是个属性而已。你不用他的,或你用你自定义方法
      

  6.   

    一属性,在我看来可有可无。相当于java里面的。this.getClass()     默认下,constructor就应该对应   构造函数(class).  其实你把它改的乱七八糟也没有影响的,因为他就是个属性而已。你不用他的,或你用你自定义方法
      

  7.   

    一属性,在我看来可有可无。相当于java里面的。this.getClass()     默认下,constructor就应该对应   构造函数(class).  其实你把它改的乱七八糟也没有影响的,因为他就是个属性而已。你不用他的,或你用你自定义方法