Object.create()办法
ES5经由过程Object.create()方律例范了原型式持续,可以接收两个参数,一个是用作新对象原型的对象和一个可选的为新对象定义额外属性的对象,行动雷同,根本用法和膳绫擎的object一样,除了object不克不及接收第二个参数以外。
寄生式持续
寄生式持续的思路与寄生构造函数和工厂模式类似,即创建一个仅用于封装持续过程的函数。
基于person返回了一个新对象anotherPeson,新对象不仅拥有了person的属性和办法,还有本身的sayHi办法。
- function createAnother(o) {
- var clone = Object.create(o) // 创建一个新对象
- clone.sayHi = function() { // 添加办法
- console.log('hi')
- }
- return clone // 返回这个对象
- }
- var person = {
- name: 'Jiang'
- }
- var anotherPeson = createAnother(person)
- anotherPeson.sayHi()
第二次将子类的原型指向父类的实例
在重要推敲对象而不是自定义类型和构造函数的情况下,这是一个有效的模式。
寄生组合式持续
父类
在新建SubType实例是调用了SuperType构造函数,如许以来,就会在新SubType对象上履行SuperType函数中定义的所有对象初始化代码。
- function SuperType(name) {
- this.name = name
- this.colors = ['red', 'blue', 'green']
- }
第一次在子类构造函数中
- function SubType(name, job) {
- // 持续属性
- SuperType.call(this, name)
- this.job = job
- }
- // 持续办法
- SubType.prototype = new SuperType()
当应用var instance = new SubType()的时刻,会产生两组name和color属性,一组在SubType实例上,一组在SubType原型上,只不过实例上的樊篱了原型上的。
应用寄生式组合模式,可以规避这个问题。
这种模式经由过程借用构造函数来持续属性,经由过程原型链的混成情势来持续办法。
根本思路:不必为了指定子类型的原型而调用父类的构造函数,我们须要的无非就是父类原型的一个副本。
本质上就是应用寄生式持续来持续父类的原型,在将结不雅指定给子类型的原型。
- function inheritPrototype(subType, superType) {
推荐阅读
在本文中,我们将解释 Linux 体系中最关键的治理义务之一——关于体系 / CPU 的负载(load)和平均负载(Load average)的机能监控。起首来看所有的类 UNIX 体系中两个重要的表述:>>>详细阅读
本文标题:JavaScript六种继承方式
地址:http://www.17bianji.com/lsqh/35904.html
1/2 1