JavaScript的面向对象编程(OOP)(三)——聚合

之前写过了类和原型,这里再说聚合,在写关于聚合之前,对与继承我再总结一下。JavaScript中关于继承的方式一共有三种,之前写了两种,但是没有说明,这里补充说明一下。

1.类式继承:通过在函数对象内调用父类的构造函数,使自身获得父类的属性和方法。主要使用callh和apply回调

 1 var Person = function(){
 2         this.age = 16;
 3         this.sayName = function(){
 4              alert(this.name+this.age);
 5         }
 6 }
 7 var student = function(){
 8         this.name = ‘bote‘;
 9         Person.call(this);
10 }
11 var bote = new student();
12 bote.sayName();

2.原型继承:通过Prototype属性继承,这个在上一篇文章中有详细的描述,这里就不再叙述

3.聚合:有时候,我们并不需要严格的继承,真正需要的是一个类(或几个类)中的某些函数方法,这时候我们就要用到聚合了。

 介绍聚合之前需要先说一下掺元类(Mixin Classes),这是一种不需要用到严格的继承就可以复用代码的一种技术。这个类是用作扩展类的模版使用。

 //准备将要聚合的函数
 var JSON = { };
JSON.prototype = {
      toJSONString: function(){
                var outPut = [];
                for(key in this){
                outPut.push(key+"-->"+this[key]);
                }
       return outPut;
       }
}
//制作聚合函数,即一个掺元类,传入两个参数,子类和父类
function mixin(receivingclass,givingclass){
   //遍历父类的原型中所有的原型函数
    for(methodName in givingclass.prototype){
        //如果子类的原型中不存在这个原型函数,就从父类那里继承过来
        if(!receivingclass.prototype[methodName]){
            receivingclass.prototype[methodName] = givingclass.prototype[methodName];
        }
    }
}
//测试
var o = function(){
       this.name = "yuan";
       this.age = 24;
}
o.prototype = {
        toTest:function(){
         alert(2);
         }
};
mixin(o,JSON);
var a = new o();
alert(a.toJSONString());
//弹出name-->yuan,age-->24,toTest-->function (){ alert(2); },toJSONString-->function (){ var outPut = []; for(key in this){ outPut.push(key+"-->"+this[key]); } return outPut; }

可以看出,我们通过mixin函数来选择性继承了JSON的toJSONString方法,而与父类方法明一样的toTest方法还是本身的原型方法。

这是使用函数定义的类,是这样使用的,如果使用直接量定义的类,我们只需要将聚合函数里的prototype改为__proto__即可,完全的聚合方法如下

function mixin(receivingclass,givingclass){
       for(methodName in givingclass){
              f(!receivingclass.__proto__[methodName]){
              receivingclass.__proto__[methodName] = givingclass[methodName];
               }
         }
  }

这样是对于只用直接量定义的类使用,如下

var o = {naem:"sda",age:22};
mixi(o,JSON);
alert(o.toJSONString());

这样便将JSON原型里的toJSONString方法直接继承了。

时间: 2024-10-16 20:26:09

JavaScript的面向对象编程(OOP)(三)——聚合的相关文章

JavaScript的面向对象编程(OOP)(一)——类

在学习JavaScript面向对象的编程之前,需要知道,并了解面向对象的一些基本的常识.初学者中大多数都以为面向对象中,面向对象的编程是很重要和占据很大一部分精力.笔者在之前也是认为OOP是面向对象的主要部分,那么和我持有一样想法的,下面先要纠正这一想法,真正了解面向对象. 一.初识面向对象 面向对象分为三部分,包括面向对象分析(OOA).面向对象设计(OOD).面向对象的程序设计(OOP). 1.1 OO编程(Object Oriented Analysis) 典型的OO编程过程,应先整理需求

学习面向对象编程OOP 第一天

面向对象编程 Object Oriented Programming 一.什么是面向对象编程OOP 1.计算机编程架构; 2.计算机程序是由一个能够起到子程序作用的单元或者对象组合而成.也就是说由多个程序单元可以拼凑成一个完整的功能程序; 3.三个目标:重用性.灵活性和扩展性; 4.每个单独的对象或者单元都可以实现数据的接收.处理和发送; 5.在实际的项目开发中,都会使用达到OOP去声明类,而且在项目里面只用对象和类. 详细参考网址(根据原文学习的) http://www.cnblogs.com

2016/1/17 笔记 1,面向对象编程OOP 2,类

面向对象编程OOP 编程方式的发展 1,面向过程 重用性低 维护工作量大  2,面向对象 重用性高 维护容易 概念 1,对象 Object 一个具体的事物 是类的实例      2,类Class 同一类事物的统称 具有相同属性和行为的一类实体 特性:1,封装:  oop的核心思想           封装属性和行为,隐藏细节           保证内部数据完整性        2,继承: 子类自动继承所有父类的属性和行为           java是单继承 所有类的父类Object     

面向过程编程(OPP) 和面向对象编程(OOP)的关系

面向过程编程(OPP) 和面向对象编程(OOP)的关系 原文链接:http://blog.csdn.net/phphot/article/details/3985480 关于面向过程的编程(OPP)和面向对象的编程(OOP),给出这它们的定义的人很多,您可以从任何资料中找到很专业的解释,但以我的经验来看,讲的相对枯燥一点,不是很直观.除非您已经有了相当的积累,否则说起来还是比较费劲. 我是个老程序员出身,虽然现在的日常工作更多倾向了管理,但至今依然保持编码的习惯,这句话什么意思呢?我跟大家沟通应

Python笔记5#面向对象编程OOP

▲面向对象编程OOP Object Oriented Programming.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行.为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度. 而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递. 在Python

24 Python - 面向对象编程OOP

面向对象编程OOP 01内容回顾 02属性@property本质是函数 未用属性前内容 使用属性后内容 @property  属性本质是函数,但是用起来像字段 03继承.多态示例 继承通过下面的一个基类 和一个派生类讲解 里面用到了继承和多态 [基类] [派生类] [函数调用] 04类嵌套如Employee引用Department 注意:在Employee的init()的参数中用department:Department来说明department是一个类,这样写有利于代码可读性 调用 原文地址:

23 Python - 面向对象编程OOP

面向对象编程OOP 01 方法__repr__()和__str__() __repr__()方法类似java中的toString方法,用于反馈类的相关信息且可以自己定义,一般用于开发人员控制台调试 __rept__()和__str__()方法区别 在控制台交互测试时: 输入b返回__rept__()方法结果 输入print(b) 返回__str__()方法结果,如果没有定义__str__()方法  则用__rept__()结果代替__str__()方法结果 __rept__()   打印信息一般

面向对象编程的三特性、七原则和六视点

一.面向对象的特性 三个基本的特性:封装.继承与多态. 1.封装面向对象编程核心思想这一就是就是将数据和对数据的操作封装在一起.通过抽象,即从具体的实例中抽取共同的性质形成一般的概念,比如类的概念. 2.继承继承体现了一种先进的编程模式.子类可以继承父类的属性和功能,即子类继承了父类所具有的数据和数据上的操作,同时又可以增添子类独有的数据和数据上的操作.例如,"人类"继承了"哺乳类"的属性和功能,同时又增添了人类独有的属性和功能. 3.多态 多态是面向对象编程的又一

php面向对象编程(oop)基础知识

面向对象并不是一种技术,而是一种思想,是一种解决问题的最基本的思维方式!如何理解使用?OOP:面向对象编程 (直接代码说明) 1.面向对象的基本概念示例demo: 1 <?php 2 header("Content-Type: text/html;charset=utf-8"); 3 //如何类的实例化? 例如: $newA= new a(); 利用类得到对象,过程是类的实例化.关键字new完成. 4 //如何定义一个类? 例如: class a{} 类 5 //如何声明定义属性

Javascript 进阶 面向对象编程 继承的一个例子

Javascript的难点就是面向对象编程,上一篇介绍了Javascript的两种继承方式:Javascript 进阶 继承,这篇使用一个例子来展示js如何面向对象编程,以及如何基于类实现继承. 1.利用面向对象的写法,实现下面这个功能,实时更新数据的一个例子: 2.使用对上面类的继承,完成下面的效果: 好了,不多说,js的训练全靠敲,所以如果觉得面向对象不是很扎实,可以照着敲一个,如果觉得很扎实了,提供了效果图,可以自己写试试. 1.第一个效果图代码: [javascript] view pl