简单谈谈javascript代码复用模式

 更新时间:2015年01月28日 16:19:39   投稿:hebedich  
这篇文章主要简单谈谈javascript代码复用模式,主要详细介绍了类式继承模式中的默认模式,希望大家能够喜欢。

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

类式继承模式-默认模式

两个构造函数Parent和Child的例子:

复制代码 代码如下:

function Parent(name){
this.name = name||"Adam";
}
Parent.prototype.say = {
return this.name;
};
function Child(name){
}
inherit(Child,Parent);

下面是可复用继承函数inherit()的一种实现方法:

复制代码 代码如下:

function inherit(C,P){
C.prototype = new P();
}

这里原型属性应该指向一个对象,而不是一个函数,因此他必须指向一个由父构造函数所创建的实例,而不是指向构造函数本身。

在这之后,创建Child对象时,会通过原型从Parent实例获得他的功能:

复制代码 代码如下:

var kid =new Child();
kid.say();//"Adam"

调用继承之后的原型链:

进一步添加kid的属性:

复制代码 代码如下:

var kid = new Child();
kid.name = "Patrick";
kid.say();//"Patrick"

原型链的变化情况:

可以在自己对象属性里面找到name,就不用再去查找原型链了。

使用上述模式的缺点,其中一个缺点是同时继承了两个对象的属性,即添加到this的属性及原型属性。大多数时候,不需要自身的这些属性。

另外一个缺点,使用inherit()继承不支持将参数传递给子构造函数中,例如:

复制代码 代码如下:

var s = new Child("Seth");
s.say();//"Adam"

这个结果并不是期望的,虽然子构造函数可以将参数传递到父构造函数中,但是这样每次需要一个子对象时,都必须重新执行这种继承机制,而且效率低下,原因是最终会重新创建父对象。

本文就先到这里了,后续我们将持续更新javascript代码复用模式的其余几种模式。

相关文章

  • 老生常谈遮罩层 滚动条的问题

    老生常谈遮罩层 滚动条的问题

    小编遇到的问题是在弹出层后面的 遮罩层,因为有滚动条,导致滚动条下面不可视区域没有遮罩层。下面就为大家介绍一下解决方法
    2016-04-04
  • JavaScript面向对象编写购物车功能

    JavaScript面向对象编写购物车功能

    这篇文章主要为大家详细介绍了JavaScript面向对象编写购物车功能的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Three.js实现脸书元宇宙3D动态Logo效果

    Three.js实现脸书元宇宙3D动态Logo效果

    本文主要讲述通过 Three.js + Blender 技术栈,实现 Meta 公司炫酷的 3D 动态 Logo,内容包括基础模型圆环、环面扭结、管道及模型生成、模型加载、添加动画、添加点击事件、更换材质等
    2021-11-11
  • JS查找字符串中出现次数最多的字符

    JS查找字符串中出现次数最多的字符

    本文给大家带来两种js中查找字符串中出现次数最多的字符,在这两种方法中小编推荐使用第二种,对js查找字符串出现次数的相关知识感兴趣的朋友一起看看吧
    2016-09-09
  • js实现图片360度旋转

    js实现图片360度旋转

    本文主要介绍了js实现图片360度旋转的思路与方法。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • Canvas放置反弹效果随机图形(实例)

    Canvas放置反弹效果随机图形(实例)

    下面小编就为大家带来一篇Canvas放置反弹效果随机图形(实例)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 基于JavaScript实现浏览器添加收藏功能

    基于JavaScript实现浏览器添加收藏功能

    今天搞项目的时候为了实现浏览者实现添加收藏的功能,特地了解了一下相关的API,整理了一段代码帮助大家实现浏览器添加收藏功能,感兴趣的朋友跟随小编一起看看吧
    2023-02-02
  • 十个利用JavaScript实现的爱心动画特效

    十个利用JavaScript实现的爱心动画特效

    情人节将至,程序员证明自己不是直男的时候到啦!小编为大家准备了十个通过JavaScript实现的爱心动画特效,快学起来,到时候给女朋友一个惊喜吧
    2022-02-02
  • JavaScript 完成注册页面表单校验的实例

    JavaScript 完成注册页面表单校验的实例

    下面小编就为大家带来一篇JavaScript 完成注册页面表单校验的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • TypeScript中类型兼容性的示例详解

    TypeScript中类型兼容性的示例详解

    JavaScript是一门弱类型语言,它对类型是弱校验,所以才有了TypeScript。本文就来和大家一起看看TypeScript的类型兼容性的概念和分类,需要的可以参考一下
    2022-08-08

最新评论