JS继承--圣杯模式的详解
继承发展史
- 传统的模式 ==> 原型链
Grand.prototype.lastname = "Alex";
function Grand(){}var grand = new grand();Father.prototype = Grand;function Father(){this.name = "Aimee"
}
var father = new Father();
son,prototype = father;
function Son(){}
var son = new Son();
// 这种传统的继承,过多的继承了没用的属性
- 借用构造函数 ==> 利用call 和apply
按理来说不算标准的继承模式
缺点:
不能继承借用构造函数的原型,但是能使用它的功能
每次构造函数都要多走一个函数 == > 浪费效率
function person(name,age,sex){this.name = name;this.age = age;this.sex = sex;}function Alex (name.age,sex,tall){person.call(this,name,age,sex);this.tall = tall;
}
var alex = new Alex();
- 共享原型
这是一个比较好的继承方法
但不能随便改动自己的原型
Father.prototype.lastname = "Alex"function Father(){}function son(){}function inherit(Target,origin){ // 两个参数 一个目标函数每一个是原始函数Target.prototype = origin.prototype;
}inherit(Son,Father);var father = new Father();var son = new Son();
既然这种方法不能改动原型,我们就在这种方法的前提上演变出完美的方法
圣杯模式
圣杯模式是在方法三的共有原型,但是在共有原型的基础上有改变。
共享原型是:son.prototype=father.prototype
圣杯模式是:另外加个构造函数 function F(){}当做中间层,然后让 F 和 father 共有一个原型 F.prototype=father.prototype,然后 son.prototype = new F();使用原型链形成了继承关系,现在改 son.prototype 就不会影响 father.prototype
function inherit(Target,origin){function F(){};F.prototype = origin.prototype;Target.prototype = F.prototype;Target.prototype.cunstuctor = Target;// 防止constuctor指向紊乱,让Target构造函数指向归位Target.prototype.uber origin.prototype;// 找到自己的超级父级,为了让我们知道Target到底继承自谁
}
Father.prototype.lastname = "Alex";
function Father(){}
function Son(){}
inherit(Son,Father);
var son = new Son();
var father new Fahter();
有一种高端的写法 YU13 雅虎
var inherit (function(){var F = function(){};
return function(Target,Origin){F.prototype = Oigin.prototype;target.prototype = new F ();Target.prototype.constuctor = Target;Target.prototype.uber = Origin.prototype; }})
利用了闭包的机制 ,形成闭包,让F 变成了私有化变量
JS继承--圣杯模式的详解相关推荐
- js继承的六种方式详解--认真看完你就会了
今天 主要来研究一下继承这个东西 继承 共分为六种继承方式: 原型链继承 盗用构造函数继承 组合继承 实例继承(原型式继承) 寄生式继承 寄生式组合继承 原型链继承 原型链继承是ES主要继承方法,其中 ...
- JS es6的Class类详解
文章目录 JS es6的Class类详解 class基本语法 Class的基本语法之constructor Class的基本语法之类的调用方式 Class的基本语法之getter和setter Cla ...
- python类是实例的工厂_Python设计模式之工厂方法模式实例详解
本文实例讲述了Python设计模式之工厂方法模式.分享给大家供大家参考,具体如下: 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类, ...
- JS 中 valueOf() 方法的详解
JS 中 valueOf() 方法的详解 JavaScript 中的 valueOf() 方法用于返回指定对象的原始值,若对象没有原始值,则将返回对象本身.通常由JavaScript内部调用,而不是在 ...
- CentOS下Hive2.0.0集群模式安装详解
本文环境如下: 操作系统:CentOS 6 32位 Hive版本:2.0.0 JDK版本:1.8.0_77 32位 Hadoop版本:2.6.4 MySQL版本:5.6.30 1. 准备工作 1.1 ...
- Kafka单机、集群模式安装详解(二)
本文环境如下: 操作系统:CentOS 6 32位 JDK版本:1.8.0_77 32位 Kafka版本:0.9.0.1(Scala 2.11) 接上篇 Kafka单机.集群模式安装详解(一) 6. ...
- Java多线程编程中Future模式的详解
转载自 https://www.cnblogs.com/winkey4986/p/6203225.html Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker ...
- js showModalDialog参数的使用详解(转)
js showModalDialog参数的使用详解_javascript技巧_脚本之家 http://www.jb51.net/article/45281.htm 本篇文章主要是对js中showMod ...
- [js]JavaScript Number.toPrecision() 函数详解
[js]JavaScript Number.toPrecision() 函数详解 JavaScript: numberObject.toPrecision( [ precision ] ) 如果没有提 ...
- java 组合对象_Java 中组合模型之对象结构模式的详解
Java 中组合模型之对象结构模式的详解 一.意图 将对象组合成树形结构以表示"部分-整体"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 二.适用性 ...
最新文章
- 发表的原创文章还希望大家多提宝贵意见!
- 0330 第九次课:软件包安装及卸载
- AI人工智能资料分享来袭,还不快来!
- 关于 web.config impersonate 帐号模拟
- system类的 静态方法可以启动垃圾回收器。_跟小伟一起学习类加载机制
- iPhone 无线投影到 Mac
- WPF基础五:UI①布局元素StackPanel
- 死亡细胞Mod制作教程
- 华三华为设备序列号查看生产日期
- 网页前端设计之多选按钮
- RocketMq配置rocketmq-console控制台管理账号密码
- 玉米迷宫,Meteor Shower S,单词接龙
- 计算机无法转换输入发,电脑无法切换输入法怎么办
- 仿慕课网Android端app——慕课Ime(自写服务器接口)
- vos3000及外呼系统编码所占带宽详细说明
- Servlet之 http://localhost:8080/ 详解
- 南邮校园网CSDN 等部分网站图片无法加载的问题
- 面试答案来了,从用户角度看如何能做出合格的产品?
- flutter版本管理工具fvm及GUI工具Sidekick
- PDF去除水印的问题
热门文章
- 最薄翻转笔记本 联想Yoga13-IFI 6700
- 2021湖北技能高考成绩时间查询,2020湖北技能高考成绩查询时间
- this的三种用法 详解
- php rrd update,通过shell脚本批量更新Cacti的RRD数据库文件
- Android 中Goolgle 相关服务的移植[转]
- win11系统中文名改英文名(win11、win10修改用户名)超详细图文
- import time python_Python——入门级(import 模块)
- 批量将B站学习视频以MP4格式下载到本地
- CRT和LCD显示器的区别
- java实现发送国际短信的功能