javascript中的继承-原型式继承
2014-04-15 21:10
267 查看
道格拉斯-克罗克福德在2006年写了一篇文章,大意介绍了一种实现继承的方法,这种方法并没有使用严格意义上的构造函数.他的想法是借助原型可以基于已有的对象创建新对象,同时还不必因此创建自定义类型.这个是不是优点,这里暂且不表.
在object()函数内部,先创建了一个临时性的构造函数,然后将传入的对象作为这个构造函数的原型,最后返回了这个临时类型的一个新实例.从本质上讲,object()对传入其中的对象执行了一次浅复制.
在ECMAScript5中新增了Object.create方法,规范化了原型式继承.这个方法接收两个参数:1作用新对象原型的对象;2一个为新对象定义额外属性的对象(可选),在传入一个参数的情况下Object.create()与object()方法的行为相同:
第二个参数的用法:
记住,包含引用类型值的属性始终都会共享相应的值,就像使用原型模式一样.
function object(o){ function F(){} F.prototype=o; return new F(); }
在object()函数内部,先创建了一个临时性的构造函数,然后将传入的对象作为这个构造函数的原型,最后返回了这个临时类型的一个新实例.从本质上讲,object()对传入其中的对象执行了一次浅复制.
var person={ name:"nUll", friends:["gay1","gay2"] }; var personA=object(person); personA.name="mywei"; personA.friends.push("gay3"); var personB=object(person); alert(personB.name); //nUll 来至原型 personB.name="nUll"; personB.friends.push("gay4"); alert(person.name); //nUll 来至原型 alert(personA.name); //mywei 来至personA 实例 alert(personB.name); //nUll 来至personB实例 alert(person.friends); //gay1,gay2,gay3,gay4 由于实例里不存在friends属性,所以这些改动都被直接记录到原型中的friends中了
在ECMAScript5中新增了Object.create方法,规范化了原型式继承.这个方法接收两个参数:1作用新对象原型的对象;2一个为新对象定义额外属性的对象(可选),在传入一个参数的情况下Object.create()与object()方法的行为相同:
var person={ name:"nUll", friends:["gay1","gay2"] }; var personA=Object.create(person); personA.name="mywei"; personA.friends.push("gay3"); var personB=Object.create(person); alert(personB.name); //nUll 来至原型 personB.name="nUll"; personB.friends.push("gay4"); alert(person.name); //nUll 来至原型 alert(personA.name); //mywei 来至personA 实例 alert(personB.name); //nUll 来至personB实例 alert(person.friends); //gay1,gay2,gay3,gay4 由于实例里不存在friends属性,所以这些改动都被直接记录到原型中的friends中了
第二个参数的用法:
var person={ name:"nUll", friends:["gay1","gay2"] }; var personA=Object.create(person,{ name:{ value:"mywei" } }); alert(personA.name); //mywei
记住,包含引用类型值的属性始终都会共享相应的值,就像使用原型模式一样.
相关文章推荐
- Javascript中类式继承和原型式继承的实现方法和区别之处
- 【JavaScript学习】面向对象的程序设计(6):原型式继承
- js设计模式学习之面向对象的javascript(三)--原型式继承
- JavaScript继承基础讲解,原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承
- JavaScript中的继承之原型式继承
- JavaScript中的类式继承和原型式继承
- javascript原型式继承。
- 理解JavaScript原型式继承
- JavaScript ----------------- 原型式继承
- JavaScript原型式继承的迷惑
- javascript继承之原型式继承(四)
- Javascript面向对象编程-原型式继承和复制继承
- javascript 的 继承(四) 之 原型式继承
- JavaScript继承,原型式继承
- JavaScript高级程序设计之面向对象的程序设计之继承之原型式继承第6.3.4讲笔记
- JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
- JS学习笔记——JavaScript继承的6种方法(原型链、借用构造函数、组合、原型式、寄生式、寄生组合式)
- JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
- JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
- Javascript中类式继承和原型式继承的实现方法和区别