SOURCE

function Parent() {
    this.name= '张三',
    this.age= 22
}

Parent.prototype.say= function() {
    console.log("说话...")
}

// 寄生组合继承
function Child() {
    Parent.call(this)
    this.sex= '男'
}

Child.prototype.sleep= function() {
    console.log('睡觉...')
}
Child.prototype= Object.create(Parent.prototype);
Child.prototype.constructor= Child;
const obj= new Child();

console.log(obj.sex)
obj.say()
obj.sleep()

// 实例的constructor
console.log(obj.__proto__ === Child.prototype)

console.log('=========================++++++++++++++++++++++++============================')
function newFn() {
    const obj= {}
    obj.__proto__= Child.prototype;
    Child.call(obj);
    return obj;
}

const obj2= newFn();

console.log(obj2.name)
obj2.say()



/**
 * 1、实例的constructor属性一定指向构造函数
 * 2、js的对象包括函数都有一个__proto__属性,但是只有函数和class具有prototype(原型对象)属性。
 * 3、函数的原型对象(prototype)都默认含有一个隐藏的constructor(构造函数),constructor指向函数自身。
 * 4、__proto__是浏览器赋予的属性,所有的对象都有包括函数,它指向的是创建它的构造函数的原型对象。
 * 5、
 */


// person.prototype,  Function.prototype, Persion.prototype,  Function.prototype,  null


console 命令行工具 X clear

                    
>
console