SOURCE

/**
 * 原型 的构造函数 constructor
 *      constructor: 称为 构造函数,指回构造函数本身
 *      
 *      其实就是告诉我们 我们这个对象 通过哪个 构造函数 创造出来的
 *      1.对象原型(__proto__)和 构造函数(prototype)原型对象 里面都有一个 constructor属性
 *      2.constructor 主要用于记录 该对象引用了 哪个构造函数, 让原型对象重新指向原来的构造函数
 *      3.如果我们修改了原来的原型对象,给原型对象赋值的是一个对象,则必须手动利用constructor指回原来的构造函数
 */

function Star(name,age) {
    this.name = name;
    this.age = age;
}

// 很多情况下,我们需要手动的利用constructor 这个属性 指回 原来的构造函数

/**
 * 这种方式 直接在prototype原型对象上添加方法sing 和 movie
 * 打印的构造函数 指向的 Star构造函数:
 *  console.log(Star.prototype.constructor);
    console.log(yy.__proto__.constructor); 
    ƒ Star(name,age) {
            this.name = name;
            this.age = age;
        }
        ƒ Star(name,age) {
            this.name = name;
            this.age = age;
        }

 */
Star.prototype.sing = function() {
    console.log('唱歌')
};
Star.prototype.movie = function() {
    console.log('电影')
}

/**
 * 第二种表达方式:
 *  我们修改了原来的原型对象,给原型对象赋值的事一个对象 如下:
 * 
 *  如果不添加 constructor: Star 
        console.log(Star.prototype.constructor);
        console.log(yy.__proto__.constructor); 
        ƒ Object() { [native code] }
        VM22694:6 ƒ Object() { [native code] }

    如果添加 constructor: Star  将手动指回 构造函数 Star
 */
Star.prototype = {
    constructor: Star, // 利用constructor 这个属性 指回 原来的构造函数
    sing: function() {
        console.log('唱歌')
    },
    movie: function() {
        console.log('电影')
    }
}

var yy = new Star('yy',19); // 通过构造函数创建的对象实例
var hh = new Star('hh',17);
console.log(Star.prototype, 'p'); // 打印构造函数的 prototype原型对象
console.log(yy.__proto__); // 打印 对象的__proto__对象
/**
 * {sing: ƒ, constructor: ƒ}
    sing: ƒ ()
    constructor: ƒ Star(name,age) 
    __proto__: Object
    }
 */
/**
 * {sing: ƒ, constructor: ƒ}
    sing: ƒ ()
    constructor: ƒ Star(name,age)
    __proto__: Object
 */

console.log(Star.prototype.constructor);
console.log(yy.__proto__.constructor); 

/**
 * ƒ Star(name,age) {
        this.name = name;
        this.age = age;
    }
    ƒ Star(name,age) {
        this.name = name;
        this.age = age;
    }
 */
console 命令行工具 X clear

                    
>
console