javascript在哪種情況下不要在Object.prototype中加入可列舉屬性

伊谢尔伦
發布: 2017-07-26 17:03:17
原創
1359 人瀏覽過

絕對不要在Object.prototype中加入可列舉的(Enumerable)屬性

如果你的程式碼中依賴for..in迴圈來遍歷Object型別中的屬性的話,不要在Object.prototype中加入任何可列舉的屬性。

但是在對JavaScript執行環境進行增強的時候,往往都需要在Object.prototype物件上新增的屬性或方法。例如可以加入一個方法用來得到某個物件中的所有的屬性名稱:


Object.prototype.allKeys = function() { var result = []; for (var key in this) { result.push(key); } return result; };
登入後複製

但是結果是下面這個樣子的:


#
({ a: 1, b: 2, c: 3}).allKeys(); // ["allKeys", "a", "b","c"]
登入後複製

一個可行的解決方案是使用函數而不是在Object.prototype上定義新的方法:


function allKeys(obj) { var result = []; for (var key in obj) { result.push(key); } return result; }
登入後複製

但是如果你確實需要向Object.prototype上加入新的屬性,同時也不希望該屬性在for..in迴圈中被遍歷到,那麼可以利用ES5環境提供的Object.defineProject方法:


Object.defineProperty(Object.prototype, "allKeys", { value: function() { var result = []; for (var key in this) { result.push(key); } return result; }, writable: true, enumerable: false, configurable: true });
登入後複製

以上程式碼的關鍵部分就是將enumerable屬性設定為false。這樣的話,在for..in迴圈中就無法遍歷該屬性了。

以上是javascript在哪種情況下不要在Object.prototype中加入可列舉屬性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!