资讯专栏INFORMATION COLUMN

javascript实现继承的几种主要方法

chnmagnus / 3039人阅读

摘要:原型链继承核心代码核心代码优点简单容易实现缺点多拷贝了一份的属性过来并且的方法每生成一个新的就要再重新拷贝一份造成了不必要的浪费构造函数继承优点简单容易实现可以同时继承多个父对象三姓家奴缺点只能继承定义在父元素上的属性或方法而对于父元素原型

//1.原型链继承
                var supClass = function(name, sex) {
                    this.name = name || "red"
                    this.sex = sex || "good"
                    this.father = "father"
                    this.say = function() {
                        console.log(this.name)
                    }
                }
                supClass.prototype = {
                    sayHi() {
                        console.log(this.name + " hi")
                    }
                }
                
                /*var sonClass = function(name, sex) {
                    this.name = name
                    this.sex = sex
                }
                console.log(sonClass.prototype)
                sonClass.prototype = new supClass()      //核心代码
                sonClass.prototype.constructor = sonClass//核心代码
                
                var son1 = new sonClass("red", "s")
                son1.say()*/
            //优点: 简单,容易实现
            //缺点: 多拷贝了一份supClass的属性过来,并且supClass的方法每生成一个新的
            //        sonClass就要再重新拷贝一份,造成了不必要的浪费
            
            
            //2.构造函数继承
                /*var sonClass = function(name, sex, type) {
                    supClass.call(this)
                    this.type = type
                    this.sex = sex
                    this.name = name
                }                
                var son1 = new sonClass("jay", "man", "goodman")
                son1.say()*/
            //优点: 简单,容易实现,可以同时继承多个父对象(三姓家奴)
            //缺点: 只能继承定义在父元素上的属性或方法,而对于父元素原型对象上的属性或方法
            //则无法继承
            
            //3.混合继承
                /*var sonClass = function(name, sex, type) {
                    supClass.call(this)
                    this.type = type
                    this.sex = sex
                    this.name = name
                }
                sonClass.prototype = new supClass()
                sonClass.prototype.constructor = sonClass
                
                var son1 = new sonClass("jay", "man", "goodman")
                son1.say()
                son1.sayHi()*/
            //优点: 几乎完美
            //缺点: 实现复杂,使用原型继承的部分仍然没有解决会多拷贝一份父类属性从而造成
            //不必要的空间浪费的问题(可以在sonClass的prototype中看到被屏蔽的继承自父类的属性)
            
            //4.寄生组合式继承
                //使用工厂函数将父元素的原型剥离出来多带带赋值给子元素的原型
                function birth(f, s) {
                    var prototype = Object(f.prototype)
                    s.prototype = prototype
                    s.prototype.constructor = s
                }
                
                //组合式继承
                
                /*var sonClass = function(name, sex, type) {
                    supClass.call(this)
                    this.type = type
                    this.sex = sex
                    this.name = name
                }
                birth(supClass, sonClass)
                
                var son1 = new sonClass("jay", "man", "goodman")
                son1.say()
                son1.sayHi()*/
                
                //优点: 完美
                //缺点: 实现困难

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/101836.html

相关文章

  • js实现继承几种方法

    摘要:实现继承的方法借用构造函数解决原型中包含引用类型所带来的问题的过程中,使用借用构造函数伪造对象或经典继承来实现继承。 继承 在ECMAScript中继承主要是依靠原型链来实现的。 实现继承的方法 利用原型让一个引用类型继承另一个引用类型的属性和方法 什么是原型链 先要了解构造函数、原型、和实例的关系: 每一个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,实例都包含...

    pkhope 评论0 收藏0
  • JavaScript继承几种方式

    摘要:组合方式继承终极版工商建设开心能分清是孩子还是父辈二狗的构造函数已指向图示关键代码创建对象的方法就是用原型链来连接的。也让二狗有了确定的归属。 一、继承原理 原型链不知道什么是原型链?来读几个关键词: 哥欧 构 构造函数 构造函数 构造函数 实例 实例 实例 原型对象 原型对象 原型对象 prototype prototype prototype __proto__ __pro...

    SegmentFault 评论0 收藏0
  • javascript 面向对象(实现继承几种方式)

    摘要:老明调用了从原型中继承来的方法继承到了当前对象的原型中调用了从原型中扩展来的方法构造继承基本思想借用构造函数的基本思想就是利用或者把父类中通过指定的属性和方法复制借用到子类创建的实例中。 1、原型链继承 核心: 将父类的实例作为子类的原型 缺点: 父类新增原型方法/原型属性,子类都能访问到,父类一变其它的都变了 function Person (name) { ...

    liujs 评论0 收藏0
  • JavaScript中常见几种继承方式

    摘要:继承方式一混入继承继承方式二原型继承创建构造函数,并且将对象的地址赋值给构造函数的原型实现继承恢复三角关系实例化的所有对象都拥有对象的属性和方法继承方式三混入加原型继承方式四实现过程了一个新的对象,把传入作为参数的那个对象设置给新创建的这个 继承方式一:混入继承 use strict; //object:A let Oa= { money: many money, r...

    Vicky 评论0 收藏0
  • JavaScript知识点总结

    摘要:参与任何数值计算的结构都是,而且。。面向人类的理性事物,而不是机器信号。达到无刷新效果。的工作原理总是指向一个对象,具体是运行时基于函数的执行环境动态绑定的,而非函数被声明时的环境。原型对象上有一个属性,该属性指向的就是构造函数。 1.JS面向对象的理解 面向对象的三大特点:继承、封装、多态 1、JS中通过prototype实现原型继承 2、JS对象可以通过对象冒充,实现多重继承, 3...

    sean 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<