亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
javascript - js中寄生構(gòu)造函數(shù)模式和工廠模式的區(qū)別
PHP中文網(wǎng)
PHP中文網(wǎng) 2017-04-10 17:32:12
[JavaScript討論組]
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ù)存在有什么意義?

PHP中文網(wǎng)
PHP中文網(wǎng)

認證0級講師

全部回復(fù)(4)
天蓬老師

這里使用寄生構(gòu)造函數(shù)的目的是希望擴展Array的一個方法toPipeMessage,作者本意是期望能像使用普通Array一樣使用SpecialArray,故雖然把specialarray當成函數(shù)也一樣能用,但是這并不是作者的本意,也變得不優(yōu)雅。

怪我咯

寄生構(gòu)造函數(shù)專門用來為js原生的構(gòu)造函數(shù)定義新的方法。。
像上面的例子中,SpecialArray()返回了一個對象values,這個valuesArray“唯一”的區(qū)別就是比Array多了一個自定義的方法。。如果直接在Array中定義新的方法,會污染其它的數(shù)組對象甚至造成不必要的麻煩。

【JavaScript】【對象】創(chuàng)建對象、對象繼承的實用方式及理解。之前寫的文章,總結(jié)了一下幾種常用的創(chuàng)建對象、對象繼承的方式。

PHP中文網(wǎ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í)行下面操作

  1. 創(chuàng)建一個全新的對象

  2. 這個對象會被執(zhí)行[[prototype]]連接原型

  3. 函數(shù)調(diào)用中的this會綁定到新對象

  4. 如果函數(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ù)”的原因。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓,幫助PHP學習者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學習
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號