function Person(name) {
this.name = name;
}function F() {}
F.prototype = Person.prototype;现在F的构造器不就是Person的构造器了吗?alert(F.prototype.construct)也就是Person的代码为什么new F()的时候不会报错。

解决方案 »

  1.   


    F的构造函数已经变成Person的了。
    Person的构造函数不是需要传入一个name属性吗。怎么不会报错。
      

  2.   

    new F()仍然是使用 F 作为构造函数,并不依赖于原型的constructor属性,constructor存在的意义倾向于类型识别。例如:你可以将Array的constructor改为String,除了arr.constructor之外,其它功能并不影响。
    Array.prototype.constructor = String;
    var arr = ['c','b','a'];
    alert(arr.constructor===String);
    arr.sort();
    alert(arr);
      

  3.   


    对于内置类型,最好不要这么干,首先constructor识别玩死人,再者内部实现细节毕竟不清楚,constructor或许另有用处。
      

  4.   

    应该这样function F() {}
    F.prototype = new Person("ZhangSan");
      

  5.   

    楼主把constructor写成construct了,改过来就好了
      

  6.   

    参考下YUI的继承体系:
    <script type="text/javascript">
    // subClass子类,superClass父类
    function extend(subClass,superClass){
    // 新建一个空的类
    var F = function(){};
    // 父类的prototype赋给空类
    F.prototype = superClass.prototype;
    // 空类实例赋给子类的prototype
    subClass.prototype = new F();
    // 这句很重要,子类的constructor指向子类本身,
    // 之前是指向F类的
    subClass.prototype.constructor = subClass;
    // 申明一个superclass变量用来访问父类
    subClass.superclass = superClass.prototype;
    // 如果父类的prototype指向了Object的prototype,
    // 那么父类的构造函数就指向它自己
    // alert(superClass.prototype.constructor == Object.prototype.constructor)
    if(superClass.prototype.constructor == Object.prototype.constructor) {
    superClass.prototype.constructor = superClass;
    }
    }
    var Person = function(name) {
    this.name = name;
    }Person.prototype = Object.prototype;
    var Man = function() {}extend(Man,Person);
    var p = new Person();
    var m = new Man();alert(Person.prototype.constructor === Person)
    </script>
      

  7.   

    js和java不一样。有函数名一样就行,参数多了也没事,少了也没事。详细的你百度一下“javascript argument”