2013-05-08 52 views

回答

0

使用的原型是面向對象的設計更好,因爲它不能在運行中進行。當使用這個符號obj.member時,它將首先檢查非原型版本。原型允許模擬繼承,imo javascript有點不好,但我會說如果你正在嘗試使用好的面向對象的設計,最好使用原型。您可以使用原型做的另一件事是a.__proto__,即使它已被修改,它也會引用該對象的原型原型

0

在這種情況下只需製作一個常規功能即可。它不僅簡單(可能更快),但最重要的是,它避免了全局Array.prototype命名空間的混亂。

原型功能的唯一真正的巨大優勢是當你需要做對象定位。使用原型方法可以讓所有實例共享相同的函數,而使用閉包需要爲每個實例創建一個新的函數。

1

通常,擴展內置原型不受歡迎,因爲它可能會中斷for循環,並可能與未來的語言擴展衝突,並指出實現可以(並鼓勵)獨立於ECMA-262擴展語言。

我懷疑績效差異是否顯着。將洗牌功能添加到需要洗牌的對象比將內置的Array原型添加到洗牌功能更爲常見,儘管用於洗牌的通用代碼可能處於獨立功能並被重新使用。

如果您打算爲對象添加洗牌,那麼原型繼承是一個不錯的選擇,因爲它易於識別和理解,因此維護應該很容易。此外,它可以高效地使用內存和處理(儘管對於少數功能來說,差異是微不足道的)。

+1

當然,與此同時,使用'for in'循環迭代數組也是不鼓勵的:) – 2013-05-08 02:59:29

+0

另外,值得一提的是,使用Object.defineProperty(在舊版瀏覽器中不支持)如果正確使用,可以「修正」枚舉問題 – Ian 2013-05-08 03:13:35

+0

@ Jack-不使用for..in的主要原因與數組無關,與原型上的枚舉屬性無關。這是因爲枚舉順序不能得到保證,並且可能返回非數字屬性(包括原型上的那些屬性),這可能是意想不到的。這也是一個指標,一個數組可能被用在一個普通對象更適合的地方。否則,對數組(例如稀疏數組)進行迭代很好,只要管理風險即可。 – RobG 2013-05-08 04:37:31

相關問題