代码复用-5种类式继承模式

//父构造函数

function Parent(name){

this.name=name
|| ‘ling‘;

}

//向该原型添加功能

Parent.prototype.say=function(){

return this.name;

}

//空白的子构造函数

function Child(name){};

//继承开始

inherit(Child,Parent);

注:inherit()函数并非由编程语言提供,必须自己实现

#·1默认模式(prototype)

function inherit(C,P){

C.prototype=new P();

}

缺点:它同时继承了两个对象的属性,在绝大多数时候,并不需要这些自身属性,因为他很可能是指向一个特定的实例,而不是复用。

如:

var s= new Child(‘zhang‘);

s.say();        //输出‘ling’ 而不是’zhang‘

#·2借用构造函数(apply())

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

Parent.apply(this,arguments);

}

#·3借用和设置原型(#1+#2)

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

Parent.apply(this,arguments);

}

Child.prototype=new Parent();

优点:运行后的结果对象能获得父对象本身的成员副本,同时子对象也能够将任意参数传递到父构造函数。

#·4共享原型

function inherit (C,P){

C.prototype=P.prototype;

}

这种模式能够向你提供简短而迅速的原型链查询,因为所有对象共享了同一个原型。但:如果在继承链下方的某处存在一个子对象修改了原型,它将影响到所有的父对象。

#·5临时构造函数

function inherit(C,P){

var F=function(){};

F.prototype=P.prototype;

C.prototype=new F();

}

时间: 2024-08-29 09:00:10

代码复用-5种类式继承模式的相关文章

JavaScript ----------------- 寄生式继承

寄生式继承 寄生式继承是于原型式继承紧密相关的一种思路.寄生式基础的思路与寄生构造函数和工厂模式类似,既创建一个仅用于封装继承过程的函数,该函数内部以某种方式来增强对象,最后再像真地是它做了所有工作一样返回对象. 以下代码示范了寄生式继承模式. function object(o){  function F(){ } F.prototype=o;  return new F(); }; function createAnother(original){ var clone = object(or

javascript代码复用模式(三)

前面谈到了javascript的类式继承.这篇继续部分类式继承,及一些现代继承. 类式继承模式-代理构造函数 这种模式通过断开父对象与子对象之间原型之间的直接链接关系,来解决上次说到的共享一个原型所带来的问题,而且同时可以继续原型链带来的好处. 代码: function inherit(C,P){ var F = function(){}; F.prototype = P.prototype; C.prototype = new F(); } 可以看到,在这里面有一个空构造函数F(),充当了子对

javascript代码复用模式(二)

前面说到,javascript的代码复用模式,可分为类式继承和非类式继承(现代继承).这篇就继续类式继承. 类式继承模式-借用构造函数 使用借用构造函数的方法,可以从子构造函数得到父构造函数传任意数量的参数.这个模式借用了父构造函数,它传递子对象以绑定到this,并转发任意数量的参数: function Child(a,b,c,d){ Parent.apply(this,arguments); } 在这种方式中,只能继承在父构造函数中添加到this的属性,并不能继承添加到原型中的成员. 使用借用

javascript代码复用模式

原文链接:http://www.faceye.net/search/143351.html 代码复用有一个著名的原则,是GoF提出的:优先使用对象组合,而不是类继承.在中,并没有类的概念,所以代码的复用,也并不局限于类式继承.javascript中创建对象的方法很多,有构造函数,可以使用new创建对象,并且可以动态的修改对象.javascript的非类式继承(可称为现代继承模式)复用方法也很多,例如,利用其它对象组合成所需要的对象,对象混入技术,借用和复用所需要的方法. 类式继承模式-默认模式

深入理解JavaScript系列(45):代码复用模式(避免篇)

介绍 任何编程都提出代码复用,否则话每次开发一个新程序或者写一个新功能都要全新编写的话,那就歇菜了,但是代码复用也是有好要坏,接下来的两篇文章我们将针对代码复用来进行讨论,第一篇文避免篇,指的是要尽量避免使用这些模式,因为或多或少有带来一些问题:第二排是推荐篇,指的是推荐大家使用的模式,一般不会有什么问题. 模式1:默认模式 代码复用大家常用的默认模式,往往是有问题的,该模式使用Parent()的构造函数创建一个对象,并且将该对象赋值给Child()的原型.我们看一下代码: function i

JavaScript中的继承之寄生式继承

寄生式(parasitic)继承是与原型式继承紧密相关的一种思路. 寄生式继承的思路与寄生构造函数和工厂模式类似(这里提到的寄生构造函数和工厂模式都是创建对象的方法,有时间会写博客),即创建一个仅用于封装继承过程的函数,该函数在内部以某种方式来增强对象.最后再像真的是它做了所有工作一样返回对象. 还是要用之前的object函数: function object(o){ function F(){} F.prototype = o; return new F(); } 以下代码示范了寄生式继承.

javascript中类式继承和原型式继承的实现方法和区别

在所有面向对象的编程中,继承是一个重要的话题.一般说来,在设计类的时候,我们希望能减少重复性的代码,并且尽量弱化对象间的耦合(让一个类继承另一个类可能会导致二者产生强耦合).关于“解耦”是程序设计中另一个重要的话题,本篇重点来看看在javascript如何实现继承. 其它的面向对象程序设计语言都是通过关键字来解决继承的问题(比如extend或inherit等方式).但是javascript中并没有定义这种实现的机制,如果一个类需要继承另一个类,这个继承过程需要程序员自己通过编码来实现. 一.类式

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(na

精读JavaScript模式(八),JS类式继承

一.前言 这篇开始主要介绍代码复用模式(原书中的第六章),任何一位有理想的开发者都不愿意将同样的逻辑代码重写多次,复用也是提升自己开发能力中重要的一环,所以本篇也将从“继承”开始,聊聊开发中的各种代码复用模式. 其实在上一章,我感觉这本书后面很多东西是我不太理解的,但我还是想坚持读完,在以后知识逐渐积累,我会回头来完善这些概念,算是给以前的自己答疑解惑. 二.类式继承VS现代继承模式 1.什么是类式继承 谈到类式继承或者类classical,大家都有所耳闻,例如在java中,每个对象都是一个指定