console.log('找新工作')
/*
Object.create(),创建一个指定原型的对象
new Object(),创建一个默认原型的对象
*/
// let a = {name:'zhangsna'}
// let b = Object.create(a)
// console.log(b,b.name)
// let c = new Object(a)
// console.log(c,c.name)
// console.log('-----------------------------------------------')
// console.log('-----------------------------------------------')
// console.log('-----------------------------------------------')
/*
实现Object.create()
创建一个构造函数
改变原型指向(注意这里要恢复其constructor的指向,在继承中改变子类的原型时同理)
new 一个改构造函数生成的实例对象并返回
*/
// function create(fo){
// function Fn(){}
// Fn.prototype = fo
// Fn.prototype.constructor = Fn
// return new Fn()
// }
// let fo = {str:'我是create方法创建新对象指向的原型'}
// let foo = create(fo)
// // console.log(fo)
// console.dir(foo)
// console.log(foo.str)
// console.dir(foo.__proto__)
// console.log(foo.__proto__.constructor)
// console.log('-----------------------------------------------')
// console.log('-----------------------------------------------')
/*
Object.assign
*/
// let tt = {name:'zhag',sex:'girl'}
// let yy = {age:18,name:"lis"}
// Object.assign(tt,yy)
// let uu = {...tt,...yy,age:58}
// console.log(tt,yy,uu)
// console.log('-----------------------------------------------')
// console.log('-----------------------------------------------')
/*
关于继承、组合式继承
*/
function Father(name,age){
this.name = name
this.age = age
}
Father.prototype.getInfo = function(){
console.log(this.name + this.age)
}
let fa = new Father('father',22)
console.log(fa)
fa.getInfo()
console.log('Father的原型对象',Father.prototype)
console.log('-----------------------------------------------')
console.log('-----------------------------------------------')
function Son(name,age,skill){
Father.call(this,name,age)
this.skill = skill
}
/*
继承原型上方法
创建一个 父构造函数 的对象
将 子构造函数原型 指向以上对象
改变原型上constructor 的指向
*/
let prop = Object.create(Father.prototype)
console.log(prop)
console.log('当前的原型对象' , prop.__proto__)
// prop.__proto__.constructor = Son
prop.constructor = Son
Son.prototype = prop
console.log('Son的原型对象' , prop)
Son.prototype.getHeight = function(){
console.log('MY Height is 182cm!')
}
let so = new Son('erzi',15,'swimming')
console.log('-----------------------------------------------')
console.log('-----------------------------------------------')
console.log(Son.prototype)
console.log(so)
console.log(so.__proto__,'------------------------------')
console.log(so.__proto__.constructor)
so.getInfo()
so.getHeight()