并非总是必要的,但是它确实有其用途。假设我们想在基
Person类上创建一个复制方法。像这样:
// define the Person Class function Person(name) { this.name = name;}Person.prototype.copy = function() { // return new Person(this.name); // just as bad return new this.constructor(this.name);};// define the Student class function Student(name) { Person.call(this, name);}// inherit Person Student.prototype = Object.create(Person.prototype);现在,当我们创建一个新的
Student并复制它时会发生什么?
var student1 = new Student("trinth"); console.log(student1.copy() instanceof Student); // => false该副本不是的实例
Student。这是因为(没有显式检查),我们无法
Student从“基本”类返回副本。我们只能返回
Person。但是,如果我们重置了构造函数:
// correct the constructor pointer because it points to Person Student.prototype.constructor = Student;
…然后一切都按预期进行:
var student1 = new Student("trinth"); console.log(student1.copy() instanceof Student); // => true


