Student.prototype.constructor = Student是什么意思啊?
Student.prototype.constructor = Student是什么意思啊?我理解的是将Student的prototype初始化为Student,但是没想明白这样做的原因。
bosn是属于Student的,Student的prototype从Person初始化回了Student。那么问题来了,为啥bosn会追踪到Student后继续追踪到之前定义的Person?
Student.prototype.constructor = Student是什么意思啊?我理解的是将Student的prototype初始化为Student,但是没想明白这样做的原因。
bosn是属于Student的,Student的prototype从Person初始化回了Student。那么问题来了,为啥bosn会追踪到Student后继续追踪到之前定义的Person?
2015-01-10
该部分会在原型链、OOP相关得章节详细展开讨论。
简单说,当定义一个构造器(函数)时,该构造器就会有prototype属性,prototype.constructor指向这个构造器本身:
function Student() { } Student.prototype.constructor === Student; // true
当用该构造器创建Student实例时,就可以通过constructor判断是由Student构造的。
var bosn = new Student(); bosn.constructor === Student;// true
该constructor属性并不是bosn这个对象上的,而是从原型链(Student.prototype)上来的。
bosn.hasOwnProperty('constructor'); // false
当出于实现继承的目的而修改了构造器Student.prototype时,Student.prototype.constructor已经不是Student了,为了避免误解,手动重设Student.prototype.constructor属性,这样通过new Student创建的实例的constructor又可以正确取道Student了。
更多详情,关注后续课程更新吧:)
我给你测试了一下
Student.prototype = new Person;
Student.prototype.constructor = Student; ( 这句不写)
console.log(Student.prototype.constructor);
//
ƒ Person(name,age){
this.name = name;
this.age = age;
}
>>>>>>>>>>
Student.prototype.constructor = Student; ( 写上这句)
//
ƒ Student(name,age,className){
Person.call(this,name,age);
this.className = className;
}
>>>>>>>>>>
Student.prototype.constructor = Person; ( 指向Person)
//
ƒ Person(name,age){
this.name = name;
this.age = age;
}
举报