简单谈谈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代码复用模式的其余几种模式。

相关文章

  • JavaScript仿淘宝实现固定右侧侧边栏

    JavaScript仿淘宝实现固定右侧侧边栏

    这篇文章主要为大家详细介绍了如何利用JavaScript实现仿淘宝固定右侧侧边栏效果,文中示例代码介绍的非常详细,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • js下利用userData实现客户端保存表单数据

    js下利用userData实现客户端保存表单数据

    对于多数网页制作的朋友,实现在客户端保存在网页表单上的信息,比较多的是采用Cookie技术来实现,这些功能例如:下拉列表框选择的选项,文本框输入的数据等。
    2010-06-06
  • 实用的Javascript调试技巧整理

    实用的Javascript调试技巧整理

    这篇文章介绍了Javascript的调试技巧,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • js中base64与file之间的转换方法

    js中base64与file之间的转换方法

    这篇文章主要给大家介绍了关于js中base64与file之间的转换方法,最近项目中需要实现把图片的base64编码转成file文件的功能,然后再上传至服务器,需要的朋友可以参考下
    2023-09-09
  • 用JS实现轮播图效果(二)

    用JS实现轮播图效果(二)

    这篇文章主要介绍了用JS实现轮播图效果(二)的相关资料,需要的朋友可以参考下
    2016-06-06
  • js对象合并与数组合并综合应用举例

    js对象合并与数组合并综合应用举例

    这篇文章主要给大家介绍了关于js对象合并与数组合并综合应用举例的相关资料,本文将介绍常见的JS对象合并和数组合并方法,帮助读者更好地理解和运用这些方法,需要的朋友可以参考下
    2023-11-11
  • js html5获取input焦点的输入框并赋值实例

    js html5获取input焦点的输入框并赋值实例

    这篇文章主要为大家介绍了js html5获取input焦点的输入框并赋值实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • 浅谈ES6中箭头函数与普通函数的区别

    浅谈ES6中箭头函数与普通函数的区别

    箭头函数是ES6中一种新的函数的表达式,本文就来介绍一下ES6中箭头函数与普通函数的区别,非常具有实用价值,需要的朋友可以参考下
    2023-05-05
  • web3.js调用链上的方法操作NFT区块链MetaMask详解

    web3.js调用链上的方法操作NFT区块链MetaMask详解

    这篇文章主要为大家介绍了web3.js调用链上的方法操作NFT区块链MetaMask详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 微信小程序使用picker组件出现的问题探究

    微信小程序使用picker组件出现的问题探究

    这篇文章主要介绍了微信小程序自定义可搜索的picker组件,主要包括自定义可搜索的picker组件的代码以及调用实例,这里的搜索框使用的是vant微信小程序组件库,picker使用的微信小程序的原生组件,需要的朋友可以参考下
    2023-01-01

最新评论