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

来源:1-5 [JavaScript]类型检测

夜樱四重奏

2015-01-10 17:52

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

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

写回答 关注

2回答

  • Bosn
    2015-01-10 18:08:41

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


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

  • 平头哥的夏天
    2018-08-07 19:14:29

    我给你测试了一下

    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;

    }



JavaScript深入浅出

由浅入深学习JS语言特性,且解析JS常见误区,从入门到掌握

281112 学习 · 1020 问题

查看课程

相似问题