博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript实现继承的几种主要方法
阅读量:6642 次
发布时间:2019-06-25

本文共 2962 字,大约阅读时间需要 9 分钟。

//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()*/                                //优点: 完美                //缺点: 实现困难

转载地址:http://wtovo.baihongyu.com/

你可能感兴趣的文章
Hibernate查询 内连接和外连接区别
查看>>
1068. [SCOI2007]压缩【区间DP】
查看>>
下载远程(第三方服务器)文件、图片,保存到本地(服务器)的方法、保存抓取远程文件、图片...
查看>>
Docker四种网络模式
查看>>
c:url标签
查看>>
Silverlight-Validation服务器端异步数据验证
查看>>
最新VIN(车辆识别码)解析
查看>>
ubuntu下出现的问题-控制台更新源失败
查看>>
获得user account的SID,GUID
查看>>
SkyLine二次开发——解决在web页面启动时自动运行TerraExplorer的问题
查看>>
[转载]我们可以用SharePoint做什么
查看>>
ubuntu 16.04 安装Opencv-3.2.0_GPU 与 opencv_contrib-3.2.0
查看>>
ldap信息交互未完成
查看>>
输出word EXCEL xml html处理---H_print.php
查看>>
【python】安装Python 的IDE--PyCharm
查看>>
【js 方法】js 页面刷新location.reload和location.replace的区别 【转】
查看>>
一个单元测试 学习 aysnc await
查看>>
intellij 创建java web项目(maven管理的SSH)
查看>>
如何将字段中带逗号的SQLite数据库数据导入到MySQL
查看>>
动态规划复习-HDU1159
查看>>