为了账号安全,请及时绑定邮箱和手机立即绑定

Student.prototype.constructor = Student是什么意思啊?

Student.prototype.constructor = Student是什么意思啊?我理解的是将Student的prototype初始化为Student,但是没想明白这样做的原因。

bosn是属于Student的,Student的prototype从Person初始化回了Student。那么问题来了,为啥bosn会追踪到Student后继续追踪到之前定义的Person?

正在回答

2 回答

该部分会在原型链、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了。


更多详情,关注后续课程更新吧:)

9 回复 有任何疑惑可以回复我~

我给你测试了一下

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;

}



0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

Student.prototype.constructor = Student是什么意思啊?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信