2-JavaScript设计模式——commonUtils工具库之继承函数
来源:互联网 发布:java编程软件有哪些 编辑:程序博客网 时间:2024/06/05 14:20
在学习 JavaScript 设计模式之前,我们先做一个 commonUtils 工具库,以便于后期的学习和使用。
commonUtils 工具库包括:多维数组遍历,继承函数,接口类及其验证。
commonUtils 工具库包括:多维数组遍历,继承函数,接口类及其验证。
本章为继承函数:
☞ 继承的实现
// 继承的实现包含以下步骤// 定义一个父类的模板(构造器)function Sup(name, age){ this.name = name; this.age = age;}// 为父类添加原型方法Sup.prototype = { /* 注意:这里一定要重新定义构造器 因为 {} 代表的是一个单体对象,其构造器为Object,所以需要重新定义构造器为Sup; 但实际开发中,经常会有忘记重新定义构造器,我们将在继承函数中规避这一问题。 */ constructor : Sup, eat : function(){ alert(this.name + ' 正在吃饭...'); }, sleep : function(){ alert(this.name + ' 正在睡觉...'); }};// 定义一个子类的模板// 注意:父类传递的参数,子类也要传递function Sub(name, age, sex){ // 继承父类的模板,即 将父类的模板绑定到子类的模板的作用域中 Sup.call(this, name, age); this.sex = sex;}/* 1、让子类继承父类,即 让子类的原型对象 等于 父类的实例,于是 子类同时继承了父类的模板和原型对象。 2、父类实例不能传参,否则子类所继承自父类的属性就被固化了。 3、这样存在一个问题,这里继承一次父类模板,子类作用域中又继承了一次父类模板,一共继承了两次,如果父类属性成员较多,则会影响性能,我们将在继承函数中解决这一问题。*/Sub.prototype = new Sup();/* 构造函数 原型对象 实例对象 之间的关系 1、构造函数.prototype = 原型对象 2、原型对象.constructor = 构造函数(模板) 3、原型对象.isPrototypeOf(实例对象) 判断实例对象的原型 是不是当前对象 4、构造函数 <=> 实例对象 (类和实例)*/
☞ 继承函数// 命名空间var JG = {};// 继承函数。 传参:sub 子类;sup 父类。JG.extend = function(sub, sup){ // 创建一个中间类 F function F(){} F.prototype = sup.prototype; /* 让子类继承中间类 F, 这样子类继承了 中间类的构造器(空的模板)和原型对象,解决了 两次继承父类模板问题 对性能的影响 */ sub.prototype = new F(); // 将子类的构造器 改回 子类本身 sub.prototype.constructor = sub; // 为子类定义一个 superClass 属性,值为父类的原型对象,这样在子类中可以通过调用 superClass 属性来代替父类的原型对象,从而实现解耦的目的。 sub.superClass = sup.prototype; // 如果父类构造器为,Object,则更改为 父类本身,从而解决 忘记重新定义构造器问题。 if(sup.prototype.constructor === Object.prototype.constructor){ sup.prototype.constructor = sup; }};// 测试// 父类function Person(name, age){ this.name = name; this.age = age;}// 父类原型对象Person.prototype = { constructor : Person, eat : function(){ alert(this.name + ' 正在吃饭...'); }, sleep : function(){ alert(this.name + ' 正在睡觉...'); }};// 子类function Student(name, age, sex){ // 继承父类模板 Student.superClass.constructor.call(this, name, age); this.sex = sex;}// 继承JG.extend(Student, Person);// 扩展子类原型对象 注意:必须写在继承后面,否则会被重置清空Student.prototype.study = function(){ alert(this.name + ' 正在学习...');};// 实例var zhangSan = new Student('zhangSan', 18, '男');document.write(zhangSan.name + ': ' + zhangSan.age + ', ' + zhangSan.sex + '<br><br>');//zhangSan: 18, 男zhangSan.eat(); // zhangSan 正在吃饭...zhangSan.sleep(); // zhangSan 正在睡觉...zhangSan.study(); // zhangSan 正在学习...
阅读全文
1 0
- 2-JavaScript设计模式——commonUtils工具库之继承函数
- 1-JavaScript设计模式——commonUtils工具库之多维数组的遍历
- 3-JavaScript设计模式——commonUtils工具库之接口类
- Javascript 设计模式——1.5 继承
- javascript继承之工具函数一
- javascript继承之工具函数二
- javascript继承工具函数之三
- 项目实践积累我的工具类——CommonUtils
- JavaScript设计模式 --- 继承
- JavaScript设计模式——构造函数模式
- Java 工具类--CommonUtils
- CommonUtils 工具类
- CommonUtils的工具类
- javascript设计模式之二——策略模式
- javascript设计模式之三——代理模式
- Javascript 设计模式学习笔记(2) - 继承(Inheritance) (上)
- Javascript 设计模式学习笔记(2) - 继承(Inheritance) (下)
- Javascript 设计模式——1.3 函数是一等对象
- java----abstract
- C++11智能指针之std::shared_ptr
- Css3实现三角效果
- ZOJ 2112 Dynamic Rankings 动态区间第k大 分块
- AS——使用Code iris生成uml
- 2-JavaScript设计模式——commonUtils工具库之继承函数
- vue2.0详细目录结构注解
- mysql数据创建用户及授权
- 平衡二叉树的判断
- 单链表反转--java版
- Week Training: 62 Unique Paths
- 6.1-6.4 JLL--实习日志--filter_box,复选框+basic function
- HttpClient使用详解
- 编程第一百天