有关于JS构造函数的重载和工厂方法

 更新时间:2013年04月07日 10:06:13   作者:  
有关于JS构造函数的重载和工厂方法,对此有需要的朋友,参考一下。

写在前面

有时候我们希望对象的初始化有多种方式。比如通过元素组成的数组来初始化一个Set对象,而不是通过传入构造函数的参数列表来初始化它

重载overload

通过重载这个构造函数方法让它根据传入参数的不同,来执行不同的初始化方法。

复制代码 代码如下:

function Set() {
this.values = {}; // 用这个对象的属性保存这个集合
this.n = 0; // 集合中值的个数

// 如果传入一个类数组的对象,将这个元素添加到集合中
// 否则,将所有的参数都添加到集合中
if(arguments.length === 1 && isArrayLike(arguments[0])) {
this.add.apply(this, arguments[0]); //把对象利用apply()添加到集合中
}else if(arguments.length > 0) {
this.add.apply(this, arguments); // 利用add()方法添加所有参数到集合中
}
}

这段代码所定义的Set()构造函数可以显式将一组元素作为参数列表传入,也可以传入元素组成的数组。但这个构造函数有多义性,如果集合的某个参数是一个数组就将无法通过这个构造函数来创建这个集合了(为了做到这一点,需要首先创建一个空集合,然后显示调用add()方法)。

工厂方法

一个类的方法用于返回类的一个实例。

复制代码 代码如下:

// 工厂方法通过数组初始化Set对象
Set.fromArray = function(arr) {
var s = new Set();
s.add.apply(s, arr);
return s;
};

不同名字的工厂方法用以执行不同的初始化。但由于构造函数是类的公有标识,因此每个类只能有一个构造函数。但这并不是一个必须遵守的规则。

辅助构造函数

通过以函数的形式调用Set()来初始化这个新对象

复制代码 代码如下:

// 定义Set类型的一个辅助构造函数
function SetFromArray(arr) {
// 通过以函数的形式调用Set()来初始化这个新对象
// 将arr的元素作为参数传入
Set.apply(this, arr);
}
// 设置原型, 以便SetFromArray能创建Set实例
SetFromArray.prototype = Set.prototype;

JavaScript 没有做不到,只有想不到

 

相关文章

  • JavaScript起点(严格模式深度了解)

    JavaScript起点(严格模式深度了解)

    严格模式(Strict Mode)是ECMAScript5新增的功能,目前所有的主流浏览器的最新版本——包括IE10与Opera12——都支持严格模式,感兴趣的朋友可以了解下啊,希望本文对你有所帮助
    2013-01-01
  • JavaScript高级程序设计(第3版)学习笔记5 js语句

    JavaScript高级程序设计(第3版)学习笔记5 js语句

    下面采用类似的形式整理一下语句的相关知识,重点突出一些ECMAScript中比较特别和个人认为比较有意思的地方,同样,没有强调的但比较基础的语句并非不重要,而是我认为你已经熟悉
    2012-10-10
  • 跨域请求的完美解决方法(JSONP, CORS)

    跨域请求的完美解决方法(JSONP, CORS)

    下面小编就为大家带来一篇跨域请求的完美解决方法(JSONP, CORS)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • JavaScript的继承的封装介绍

    JavaScript的继承的封装介绍

    继承的封装貌似在每个语言中都有,在本文为大家详细介绍下,JavaScript的继承的封装,感兴趣的朋友不要错过
    2013-10-10
  • javascript编程起步(第一课)

    javascript编程起步(第一课)

    javascript编程起步(第一课)...
    2007-01-01
  • JavaScript入门之语言基础

    JavaScript入门之语言基础

    本文通过全面列举基础的JavaScript概念这一方式来阐述该语言的基本原理,以此来为初学者提供一个对语言的基本了解,随处可见的代码例子则是用来说明所有的这些概念是如何在语言中体现出来的
    2011-10-10
  • 带你快速理解javascript中的事件模型

    带你快速理解javascript中的事件模型

    这篇文章主要介绍了javascript中的事件模型,其中包括了DOM0级事件模型和DOM2级事件模型(事件捕获和事件冒泡和DOM2级的注册事件和解除事件),需要的朋友可以参考下
    2017-08-08
  • Javascript排序算法之合并排序(归并排序)的2个例子

    Javascript排序算法之合并排序(归并排序)的2个例子

    这篇文章主要介绍了Javascript排序算法之合并排序(归并排序)的2个例子,需要的朋友可以参考下
    2014-04-04
  • javascript中有趣的反柯里化深入分析

    javascript中有趣的反柯里化深入分析

    国内对前端的研究在某些方面也不逊色于国外,反科里化的话题来自javascript之父Brendan Eich去年的一段twitter,需要深入理解的朋友可以参考本文
    2012-12-12
  • 总结js函数相关知识点

    总结js函数相关知识点

    本篇文章给大家简要分析了JS中函数相关的重要知识点,对此有兴趣的朋友可以参考学习下。
    2018-02-02

最新评论