javascript设计模式-掺元类

有一种重用代码的方法不需要用到严格的继承。如果想把一个函数用到多个类中,可以通过扩充的方式让这些类共享该函数。其实际做法大大体为:先创建一个包含各种通用方法的类,然后再用它扩充其他的类。这种方式就叫做掺元类

 1 function augment(receivingClass,givingClass){
 2     if(arguments.length > 2){
 3         for(var i= 2, len = arguments.length;i<len;i++){
 4             receivingClass.prototype[arguments[i]] = givingClass.prototype[arguments[i]];
 5         }
 6     }else{
 7         for(var methodName in givingClass.prototype){
 8             if(!receivingClass.prototype[methodName]){
 9                 receivingClass.prototype[methodName] = givingClass.prototype[methodName];
10             }
11         }
12     }
13 }
14
15 function Author(name,books){
16     this.name = name;
17     this.books = books;
18 }
19 Author.prototype.getBooks = function(){
20     return this.books;
21 }
22
23 var MiXin = function(){};
24 MiXin.prototype = {
25     serialize:function(){
26         var output = [];
27         for(key in this){
28             output.push(key + ":" + this[key]);
29         }
30         return output.join(", ");
31     }
32 }
33 augment(Author,MiXin);
34 var author = new Author("zap","读书笔记");
35 console.log(author.serialize());
时间: 2024-11-05 23:37:18

javascript设计模式-掺元类的相关文章

javascript设计模式-享元模式

享元模式采用一个共享来有效的支持大量细小粒度的对象,避免大量有相同内容的类的开销(如内存耗费),共享一个元类. 应用场景:页面存在大量的资源密集型对象:他们具备一些共性,可以分离出公共操作的数据. 一个例子,汽车登记: var Car = function(make,model,year,owner,tag,renewDate){ this.make=make; this.model=model; this.year=year; this.owner=owner; this.tag=tag; t

JavaScript设计模式-2高级类.

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript高级语法2-高级类</title> 6 </head> 7 <body> 8 <script> 9 /* 10 //在js中利用function来定义类. 11 function Shape(){ 12 var x=1;

javascript设计模式——享元模式

前面的话 享元(flyweight)模式是一种用于性能优化的模式,“fly”在这里是苍蝇的意思,意为蝇量级.享元模式的核心是运用共享技术来有效支持大量细粒度的对象.如果系统中因为创建了大量类似的对象而导致内存占用过高,享元模式就非常有用了.在javascript中,浏览器特别是移动端的浏览器分配的内存并不算多,如何节省内存就成了一件非常有意义的事情.本文将详细介绍享元模式 享元模式初识 假设有个内衣工厂,目前的产品有50种男式内衣和50种女士内衣,为了推销产品,工厂决定生产一些塑料模特来穿上他们

Javascript设计模式系列三

继承,一个类或对象继承另一个类或对象的三种方法.类式继承.原型式继承.掺元类. 一.类式继承,原型链.Extend函数. <script type="text/javascript"> ////定义Person类 var Person = function (name) { this.name = name; }; Person.prototype.getName = function () { return this.name; }; ////原型链 function A

读书笔记之 - javascript 设计模式 - 接口、封装和链式调用

javascript 采用设计模式主要有下面的三方面原因: 可维护性:设计模式有助于降低模块之间的耦合程度.这使代码进行重构和换用不同的模块变得容易,也使程序员在大型项目中合作变得容易. 沟通:设计模式为处理不同类型的对象提供了一套通用的术语.程序员可以简洁的描述自己系统的工作方式. 性能:采用一些优化性能的模式,可以大幅度提高程序的执行效率,如享元模式和代理模式等 同时,滥用设计模式也会带来一些后果: 复杂性:代码变得复杂,新手难以理解 性能:多数设计模式会或多或少的降低代码的性能 实现容易,

Javascript设计模式(1)

本文是学习了<JavaScript设计模式>(谢廷晟 译)做的学习笔记 一.JavaScript的灵活性 1. 普通 functon function startAnimation() {...} function stopAnimation() {...} 2. 类 var Anim = function() {} #构造函数 # 方式一 Anim.prototype.start = function() {...} Anim.prototype.stop = function() {...

JavaScript设计模式-4.继承和聚合

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript高级语法4-继承和聚合</title> 6 </head> 7 <body> 8 <script> 9 10 //继承 11 //创建人员类 12 function Person(name){ 13 this.name =

《javascript设计模式》笔记之第四章

一:首先,一个简单的继承实例: 首先是创建一个父类Person: function Person(name) { this.name = name; } Person.prototype.getName = function() { return this.name; } 下面是创建一个子类Author,用于继承Person: 分两步,第一步继承父类的属性,第二部继承父类的公共方法 function Author(name, books) { Person.call(this, name); /

javascript设计模式5

子类引用父类 function extend(subClass,superClass){ var F=function(){}; F.prototype=superClass.prototype; subClass.prototype=new F(); subClass.prototype.constructor=subClass; subClass.superClass=superClass.prototype; if(subClass.prototype.constructor==Objec