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