function SpecialArray(){
var values = new Array();
values.push.apply(values, arguments);
values.toPipedString = function(){
return this.join("|");
}
return values;
}
var a = new SpecialArray(2,6,8,9,4);
a.toPipedString();
var b = SpecialArray(2,6,8,9,4);
b.toPipedString();
使用或不使用new好像并沒有什么區(qū)別。
另外寄生構(gòu)造函數(shù)可以做的工作,工廠模式也能實現(xiàn);那這種寄生構(gòu)造函數(shù)存在有什么意義?
認證0級講師
這里使用寄生構(gòu)造函數(shù)的目的是希望擴展Array的一個方法toPipeMessage,作者本意是期望能像使用普通Array一樣使用SpecialArray,故雖然把specialarray當成函數(shù)也一樣能用,但是這并不是作者的本意,也變得不優(yōu)雅。
寄生構(gòu)造函數(shù)專門用來為js原生的構(gòu)造函數(shù)定義新的方法。。
像上面的例子中,SpecialArray()
返回了一個對象values
,這個values
與Array
“唯一”的區(qū)別就是比Array
多了一個自定義的方法。。如果直接在Array
中定義新的方法,會污染其它的數(shù)組對象甚至造成不必要的麻煩。
【JavaScript】【對象】創(chuàng)建對象、對象繼承的實用方式及理解。之前寫的文章,總結(jié)了一下幾種常用的創(chuàng)建對象、對象繼承的方式。
寄生構(gòu)造函數(shù)模式和工廠模式?jīng)]有本質(zhì)區(qū)別,通過new 操作符的就叫寄生構(gòu)造函數(shù)模式,直接調(diào)用的就叫工廠模式
JS里的構(gòu)造函數(shù)就是一個用來構(gòu)造對象的普通函數(shù),和JAVA不同
你要知道,通過new 來調(diào)用函數(shù),會自動執(zhí)行下面操作
創(chuàng)建一個全新的對象
這個對象會被執(zhí)行[[prototype]]連接原型
函數(shù)調(diào)用中的this會綁定到新對象
如果函數(shù)沒有返回其他對象,那么new 構(gòu)造就會自動返回這個新對象
由于這里new調(diào)用和直接調(diào)用都返回values,所以a,b引用的數(shù)組對象是一樣的
“寄生器構(gòu)造函數(shù)”可以在構(gòu)造函數(shù)不適應(yīng)的情況使用,比如要創(chuàng)建一個數(shù)組類型,像題主給的代碼一樣(因為構(gòu)造函數(shù)只能創(chuàng)建對象類型)。為了讓人一看就知道是在構(gòu)造一個新的對象類型的實例,所以雖然它寫的和工廠模式一樣,但是創(chuàng)建時用了new,因此使得實現(xiàn)的過程不一樣,和樓上的回答一樣(但是實現(xiàn)過程不重要)。
具體作用,比如創(chuàng)建具有額外方法的已有類型(如數(shù)組,Date類型等),但是又不污染原有的類型。
所以就算沒有new也一樣,只不過加上new讓人清楚這是新對象類型的實例,也是“寄生器構(gòu)造函數(shù)”里有個“構(gòu)造函數(shù)”的原因。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號