<script>
function Super() {
this.name = 'yzy'
this.sayHi = function () {
alert('HI')
}
}
Super.prototype.sayBye = function () {
console.log('bye')
}
let sub1 = new Super();
console.log(Super.prototype, 'Super.prototype') //每个函数都有一个 prototype 属性
console.dir(Super) //每一个JavaScript对象(除了 null )都具有的一个属性,叫proto,这个属性会指向该对象的原型
console.dir(Super.__proto__, 'Super.__proto__') //每一个JavaScript对象(除了 null )都具有的一个属性,叫proto,这个属性会指向该对象的原型
console.log(sub1, 'sub1')
console.log(sub1.__proto__, 'sub1.__proto__') //每一个JavaScript对象(除了 null )都具有的一个属性,叫proto,这个属性会指向该对象的原型
// console.log(Super.prototype === sub1.__proto__)
console.dir(Super.prototype.constructor)
console.dir(sub1.__proto__.constructor)
console.dir(sub1.__proto__.constructor === Super.prototype.constructor)
// 顺便学习一个ES5的方法,可以获得对象的原型
console.dir(Object.getPrototypeOf(sub1) === sub1.__proto__)
console.dir(Object.getPrototypeOf(sub1) === Super.prototype)
console.dir(Object.getPrototypeOf(sub1).constructor === Super.prototype.constructor)
console.dir(Super.prototype.__proto__, 'Super.prototype.__proto__')
console.dir(Object.prototype)
console.log(Super.prototype.__proto__ === Object.prototype, '666')
console.dir(Object.prototype)
console.dir(Object.prototype.constructor === Object)
// JavaScript 默认并不会复制对象的属性,相反,JavaScript 只是在两个对象之间创建一个关联,这样,一个对象就可以通过委托访问另一个对象的属性和函数,所以与其叫继承,委托的说法反而更准确些
</script>
console.dir(Function.__proto__ === Function.prototype)
console.dir(Function.prototype === Function.prototype)
console.dir(Object.__proto__ === Function.prototype)
console.dir(Function.prototype.__proto__ === Object.prototype)
console.log(Object.prototype.__proto__ === null) // true