有關(guān)于JS構(gòu)造函數(shù)的重載和工廠方法
寫在前面
有時候我們希望對象的初始化有多種方式。比如通過元素組成的數(shù)組來初始化一個Set對象,而不是通過傳入構(gòu)造函數(shù)的參數(shù)列表來初始化它
重載overload
通過重載這個構(gòu)造函數(shù)方法讓它根據(jù)傳入?yún)?shù)的不同,來執(zhí)行不同的初始化方法。
function Set() {
this.values = {}; // 用這個對象的屬性保存這個集合
this.n = 0; // 集合中值的個數(shù)
// 如果傳入一個類數(shù)組的對象,將這個元素添加到集合中
// 否則,將所有的參數(shù)都添加到集合中
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()方法添加所有參數(shù)到集合中
}
}
這段代碼所定義的Set()構(gòu)造函數(shù)可以顯式將一組元素作為參數(shù)列表傳入,也可以傳入元素組成的數(shù)組。但這個構(gòu)造函數(shù)有多義性,如果集合的某個參數(shù)是一個數(shù)組就將無法通過這個構(gòu)造函數(shù)來創(chuàng)建這個集合了(為了做到這一點(diǎn),需要首先創(chuàng)建一個空集合,然后顯示調(diào)用add()方法)。
工廠方法
一個類的方法用于返回類的一個實例。
// 工廠方法通過數(shù)組初始化Set對象
Set.fromArray = function(arr) {
var s = new Set();
s.add.apply(s, arr);
return s;
};
不同名字的工廠方法用以執(zhí)行不同的初始化。但由于構(gòu)造函數(shù)是類的公有標(biāo)識,因此每個類只能有一個構(gòu)造函數(shù)。但這并不是一個必須遵守的規(guī)則。
輔助構(gòu)造函數(shù)
通過以函數(shù)的形式調(diào)用Set()來初始化這個新對象
// 定義Set類型的一個輔助構(gòu)造函數(shù)
function SetFromArray(arr) {
// 通過以函數(shù)的形式調(diào)用Set()來初始化這個新對象
// 將arr的元素作為參數(shù)傳入
Set.apply(this, arr);
}
// 設(shè)置原型, 以便SetFromArray能創(chuàng)建Set實例
SetFromArray.prototype = Set.prototype;
JavaScript 沒有做不到,只有想不到
- 如何實現(xiàn)JS函數(shù)的重載
- js 覆蓋和重載 函數(shù)
- js中方法重載如何實現(xiàn)?以及函數(shù)的參數(shù)問題
- JS函數(shù)重載的解決方案
- Javascript基礎(chǔ) 函數(shù)“重載” 詳細(xì)介紹
- 詳解JS函數(shù)重載
- 為JavaScript添加重載函數(shù)的輔助方法
- JavaScript中的函數(shù)重載深入理解
- 添加JavaScript重載函數(shù)的輔助方法2
- javascript函數(shù)重載解決方案分享
- 通過實例理解javascript中沒有函數(shù)重載的概念
- JavaScript函數(shù)重載操作實例淺析
相關(guān)文章
JavaScript起點(diǎn)(嚴(yán)格模式深度了解)
嚴(yán)格模式(Strict Mode)是ECMAScript5新增的功能,目前所有的主流瀏覽器的最新版本——包括IE10與Opera12——都支持嚴(yán)格模式,感興趣的朋友可以了解下啊,希望本文對你有所幫助2013-01-01
JavaScript高級程序設(shè)計(第3版)學(xué)習(xí)筆記5 js語句
下面采用類似的形式整理一下語句的相關(guān)知識,重點(diǎn)突出一些ECMAScript中比較特別和個人認(rèn)為比較有意思的地方,同樣,沒有強(qiáng)調(diào)的但比較基礎(chǔ)的語句并非不重要,而是我認(rèn)為你已經(jīng)熟悉2012-10-10
Javascript排序算法之合并排序(歸并排序)的2個例子
這篇文章主要介紹了Javascript排序算法之合并排序(歸并排序)的2個例子,需要的朋友可以參考下2014-04-04
總結(jié)js函數(shù)相關(guān)知識點(diǎn)
本篇文章給大家簡要分析了JS中函數(shù)相關(guān)的重要知識點(diǎn),對此有興趣的朋友可以參考學(xué)習(xí)下。2018-02-02

