编辑代码

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()