function Person(name) {
this.name = name;
}function F() {}
F.prototype = Person.prototype;现在F的构造器不就是Person的构造器了吗?alert(F.prototype.construct)也就是Person的代码为什么new F()的时候不会报错。
this.name = name;
}function F() {}
F.prototype = Person.prototype;现在F的构造器不就是Person的构造器了吗?alert(F.prototype.construct)也就是Person的代码为什么new F()的时候不会报错。
F的构造函数已经变成Person的了。
Person的构造函数不是需要传入一个name属性吗。怎么不会报错。
Array.prototype.constructor = String;
var arr = ['c','b','a'];
alert(arr.constructor===String);
arr.sort();
alert(arr);
对于内置类型,最好不要这么干,首先constructor识别玩死人,再者内部实现细节毕竟不清楚,constructor或许另有用处。
F.prototype = new Person("ZhangSan");
<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>