<强>一、原型式继承本质其实就是个浅拷贝,以一个对象为模板复制出新的对象强>
function 对象(,o ) { ,,,,,,,,,,,var G =,函数(){}; ,,,,,,,,,,,G.prototype =, o; ,,,,,,,,,,,return new G (); ,,,,,,,} ,,,,,,,var obj =, { ,,,,,,,,,,,name :,“ghostwu”, ,,,,,,,,,,,age :, 22日 ,,,,,,,,,,,show :,函数(){ ,,,,,,,,,,,,,,,return this.name +,,, +, this.age; ,,,,,,,,,,,} ,,,,,,,}; ,,,,,,,var obj2 =,对象(,obj ); ,,,,,,,console.log (obj2.name的不同之处是,obj.age, obj.show (),),
对象函数中,以对象o为模板,在对象函数体里面,定义一个构造函数,让构造函数的原型对象(原型)指向o,
返回构造函数的一个实例,这样就可以访问到对象o的所有属性和方法。
<强>二,因为原型式继承是个浅拷贝,所以引用类型的数据共享在不同的实例之间强>
function 对象(,o ) { ,,,,,,,,,,,var G =,函数(){}; ,,,,,,,,,,,G.prototype =, o; ,,,,,,,,,,,return new G (); ,,,,,,,} ,,,,,,,var obj =, { ,,,,,,,,,,,skills :, (, php, javascript的,) ,,,,,,,}; ,,,,,,,var obj2 =,对象(,obj ); ,,,,,,,obj2.skills.push (,“python”); ,,,,,,,var obj3 =,对象(,obj ); ,,,,,,,console.log (, obj3.skills );,//php, javascript、python
methoda改变了技能数组,obj3的技能结果就是其他实例改变的结果
<强>三,在es5中,新增了一个函数Object.create()实现了原型式继承强>
var obj =, { ,,,,,,,,,,,skills :, (, php, javascript的,) ,,,,,,,}; ,,,,,,,var obj2 =, Object.create (, obj ); ,,,,,,,obj2.skills.push (,“python”); ,,,,,,,var obj3 =, Object.create (, obj ); ,,,,,,,console.log (, obj3.skills );,//php, javascript、python
<强> <强>四,寄生式继承就是把原型式继承再次封装,然后在对象上扩展新的方法,再把新对象返回强> 强>
function 对象(,o ) { ,,,,,,,,,,,var G =,函数(){}; ,,,,,,,,,,,G.prototype =, o; ,,,,,,,,,,,return new G (); ,,,,,,,} ,,,,,,,function CreateObj (, srcObj ) { ,,,,,,,,,,,var dstObj =,对象(,srcObj ); ,,,,,,,,,,,dstObj.sayName =,函数(){ ,,,,,,,,,,,,,,,return this.userName; ,,,,,,,,,,,} ,,,,,,,,,,,return dstObj; ,,,,,,,} ,,,,,,,var obj =, { ,,,,,,,,,,,userName :,“ghostwu”, ,,,,,,,}; ,,,,,,,var obj2 =, CreateObj (, obj ); null(js高手之路)原型式继承与寄生式继承