JavaScript模式读书笔记 第6章 代码复用模式

主要使用代码继承来完成复用。

1,使用类式继承。

-1,类式继承:按照类的方式来实现继承,即所谓的类式。

-2,类式继承:通过构造函数(child)获取来自parent的属性,从而创建对象。


<script>

		

	//parent

	 function Parent(name){

		

		this.name = name || ‘Adam‘;

	 }

	 Parent.prototype.say = function(){

	 

		return this.name;

	 }

	 //child

	 function Child(name){

		

 

	 }

	//此处实现继承,需要自己实现

	 inherit(Child, Parent);

 

  </script>

-3,默认模式


 

	 //默认模式

	 function inherit(C, P){

		

		C.prototype = new P();

	 }

 

	 var kid = new Child();

	 console.log(kid.say());//输出Adam

-4,借用构造函数

借用父类构造函数,它传递子对象以绑定到this,并且还转发任意参数。


<script>

	

	//父构造函数

	function Article(){

		

		this.tags = [‘js‘, ‘css‘];

	}

	var article = new Article();

 

	function BlogPost(){

 

	}

	BlogPost.prototype = article;//获取到对应对象的一个引用

	var blog = new BlogPost();

 

	function StaticPost(){

		

		Article.call(this);//获取到对应对象成员的副本,相当于在本对象中生成同样的一个成员变量

	}

	var page = new StaticPost();

	

	console.log(article.hasOwnProperty(‘tags‘));//true

	console.log(blog.hasOwnProperty(‘tags‘));//false

	console.log(page.hasOwnProperty(‘tags‘));//true

 

  </script>

-5,借用和设置原型


<script>

	

	function Child(a, b, c, d){

		

		Parent.apply(this, arguments);//通过借用获取到父类的成员变量

	}

 

	Child.prototype = new Parent();//通过此处获父类的方法

 

  </script>

<script>

	

	function Parent(name){

		

		this.name = name || "Tom";

	}

	Parent.prototype.say = function(){

		

		return this.name;

	}

	function Child(name){

		

		Parent.apply(this, arguments);

	}

 

	Child.prototype = new Parent();

 

	var kid = new Child("Child");

	console.log(kid.name);//child

	console.log(kid.say());//child

	delete kid.name;

	console.log(kid.say());//Tom

 

  </script>

-6,共享原型


function inherit(C, P){

   

   C.prototype = P.prototype;

}

如果继承链下方的某个子类修改原型,那么会影响到所有原型链上的对象。

-7,临时构造函数


function inherit(C, P){

 

   var F = function(){};

   F.prototype = P.prototype;

   C.prototype = new F();

}

-8,Klass

a. 都有一套关于如何命名类方法的公约。

b. 存在从其他类所继承的类。

c.在子类中可以访问父类或超类。


 <script>

	

	var klass = function(Parent, props){

		

		var Child, F, i;

 

		//1. 新构造函数

		Child = function(){

			

			if(Child.uber && Child.uber.hasOwnProperty("_construct")){

				

				Child.uber._construct.apply(this, arguments);

			}

 

			if(Child.prototype.hasOwnProperty("_construct")){

				

				Child.prototype._construct.apply(this, arguments);

			}

		};

 

		//2. 继承

		Parent = Parent || Object;

		F = function(){};

 

		F.prototype = Parent.prototype;

		Child.prototype = new Child();

		Child.uber = Parent.prototype;

		Child.prototype.constructor = Child;

 

		//3.添加实现方法

		for(i in props){

			

			if(props.hasOwnProperty(i)){

				

				Child.prototype[i]= props[i];

			}

		}

 

		return Child;

 

	};

 

  </script>

代码复用才是目的,继承只是实现这一目标的方法之一。

时间: 2024-10-28 16:57:51

JavaScript模式读书笔记 第6章 代码复用模式的相关文章

JavaScript模式读书笔记 第5章 对象创建模式 1

1,命名空间模式  namespace   <script> var myApp = {};//通过全局变量来实现命名空间 maApp.Parent = function (){   }; myApp.Child = function(){ };   </script> 通用命名空间函数   <script> //不安全代码 var myApp = {}; //安全代码 if(typeof myApp === "undefined"){ var my

JavaScript模式读书笔记 文章3章 文字和构造

1.对象字面量 -1.Javascript中所创建的自己定义对象在任务时候都是可变的.能够从一个空对象開始,依据须要添加函数.对象字面量模式能够使我们在创建对象的时候向其加入函数.       <script> //定义空对象 var dog = {}; //对空对象加入方法 dog.name = "Liubo"; //对对象添加方法 dog.getName = function(){ return dog.name; }; //改变属性和方法 dog.getName =

JavaScript模式读书笔记 第4章 函数

2014年11月10日 1,JavaScript函数具有两个特点: 函数是第一类对象    函数可以提供作用域 函数即对象,表现为: -1,函数可以在运行时动态创建,也可以在程序执行过程中创建. -2,函数可以分配给变量,可以将它们的引用复制到其他变量,可以被扩展,此外,函数还可以被删除. -3,可以做为参数传递给其他函数,,还可以由其他函数返回. -4,函数可以有自己的属性和方法. 2,声明VS表达式:名称和变量声明提升 //这是一个函数表达式 //它做为一个参数传递给函数 CallMe ca

JavaScript模式读书笔记 第3章 字面量和构造函数

1,对象字面量 -1,Javascript中所创建的自定义对象在任务时候都是可变的.可以从一个空对象开始,根据需要增加函数.对象字面量模式可以使我们在创建对象的时候向其添加函数.       <script> //定义空对象 var dog = {}; //对空对象添加方法 dog.name = "Liubo"; //对对象增加方法 dog.getName = function(){ return dog.name; }; //改变属性和方法 dog.getName = f

JavaScript模式读书笔记 第7章 设计模式

1,单例模式 -1,最简单的单例: <script> //obj为单例 var obj = { myProp: "My Value" }; var obj1 = obj; var obj2 = obj; console.log(obj1 == obj2);//true console.log(obj1 === obj2);//true   </script> -2,静态属性中的实例:  <script> function Universe(){ if

【javascript dom读书笔记】 第九章 CSS-DOM

用dom设置样式 element.style.property = value 何时用dom脚本设置样式 作者写到:绝大多数的现代浏览器,虽然对css伪类的支持不是很完整,但是对dom都有良好的支持,所以需要考虑的是问题最简单的解决方案是什么,哪种解决方案会得到更多的浏览器支持. 在尝试了书中dom设置的实例以后,虽然代码比css要多很多,但是有一种操纵的快感,这应该是dom编程的艺术所在吧,有一种后端语言的感觉,至于实际使用中的选择,见仁见智做出更适合的自己的决定. 但最后作者说到有一种css

《javascript设计模式》笔记之第九章:组合模式

之前一直都是按照书的结构顺序做总结,觉得好像不是很好,现在试着完全按照自己的理解做总结.例子还是书上的例子. 一:组合模式的作用: 在web开发中,主要用于创建嵌套的html结点,使得我们方便的把各种结点连接起来,并且提供简易的操作.   二:组合模式的结构: 结构就像我们的文件结构一样讲Composite理解为文件夹,Leaf理解为文件就好理解了.   三:例子一,创建一个组合的表单 需求:试想着我们想要构建一个表单,但是表单域经常要被产品经理修改,我们怎样才能利用js快速的搭建这个form呢

iOS开发中的那些的约定俗成(1)————《编写高质量iOS与OS X代码的52个有效方法》读书笔记(第一章)

iOS开发中的那些的约定俗成(1) ----<编写高质量iOS与OS X代码的52个有效方法>读书笔记(第一章) 前言 "我要成为一个高产的开发人员.""想要混的好,就得多努力." 写这些东西是因为毕竟看了书,但是看书看过去之后,也许印象不是很深刻,有些东西现在也理解不了,那我就把我理解的,现在就可以用到的东西,简单的写出来就好,让自己今后看到就能明白其中的意思. 还有就是锻炼一下表达,编辑能力,慢慢的提升自己,随时随地的都要有一个锻炼的心. 最后当然就

《大型网站技术架构》读书笔记二:大型网站架构模式

一.分层 最常见的架构模式,将系统在横向维度上切分成几个部分,每个部分单一职责.网站一般分为三个层次:应用层.服务层和数据层,其具体结构如下图所示: 通过分层,一个庞大系统切分成不同部分,便于分工合作和维护. 但是,分层架构也有一些挑战:①必须合理规划层次边界和接口:②禁止跨层次的调用及逆向调用. 二.分割 分割是在纵向方面对软件进行切分->将不同的功能和服务分割开来,包装成高内聚低耦合的模块单元,有助于软件开发和维护,还便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力. 三.分布