JavaScript >> Javascript 文檔 >  >> JavaScript

Mozilla JavaScript 擴展:__count__

Mozilla JavaScript 引擎支持額外的非標準特性,從而導致向開發人員公開額外的屬性和方法。上週,我談到了__noSuchMethod__() 可用於對象的方法。本週的主題是__count__ property,默認情況下存在於所有用戶定義的對像上,表示該對像上有多少個屬性和方法。此屬性不能被覆蓋,也不能使用 delete 刪除 運算符,因為它的特殊用途。

更具體地說,__count__ 屬性始終反映對象實例成員的數量。每次向對象添加屬性或方法時,__count__ 屬性已更新;每當您使用 delete 刪除屬性或方法時,__count__ 屬性已更新。例如:

//Works in Mozilla JavaScript engines only!
var person = {
    name: "Nicholas"
};

alert(person.__count__);    //1

person.hair = "brown";
alert(person.__count__);    //2

delete person.name;
alert(person.__count__);    //1

在這個例子中,一個對象 person 使用單個屬性創建,name 所以 __count__ 的初始值 是 1. 當 hair 添加屬性,__count__ 自動更新為 2。同樣,刪除 name 屬性導致 __count__ 被重置為 1。所有這些都在對像被操作時自動發生。

關於 __count__ 的重要注意事項 是它只處理實例成員,因此不考慮通過原型鏈繼承的屬性和方法。在非 Mozilla JavaScript 引擎中,您需要編寫一個循環並使用 hasOwnProperty() 建立這樣一個計數:

//all browsers
function getPropertyCount(object){
    var count=0,
        property;
    for (property in object){
        if (object.hasOwnProperty(property)){
            count++;
        }
    }
    return count;
}

顯然,使用 __count__ 比創建循環計算實例成員數要高效得多。

所以問題仍然存在,為什麼知道對像上實例成員的數量會有用?當您想在繼續之前了解對像是否只有繼承的成員時,這非常有用:

if(getPropertyCount(object) > 0){
    //do something
}

這種類型的構造有助於識別具有實例成員的對象與僅由繼承成員組成的對象。例如,JSON 序列化在很大程度上依賴於實例成員的存在。

__count__ 屬性在 JavaScript 世界中並沒有真正做太多,但它確實提供了更多關於幕後發生的事情的反饋。此擴展尚未被非Mozilla瀏覽器使用,因此不建議將其用於跨瀏覽器開發。


Tutorial JavaScript 教程
  1. react-with-typescript 應用程序中的 MUI

  2. 重新設計我的投資組合!它加載非常快⚡

  3. 使用 JavaScript 檢測生成器函數

  4. JavaScript 需要類嗎?

  5. Javascript 中的 Object.freeze() 🎈

  6. 排版:從語義中分離風格

  7. 如何使用 Node.js 讀寫 JSON 文件?

  1. 🐛 如何在 VS Code 中快速發現 JavaScript 代碼中的錯誤

  2. 從頭開始設置 React:啟動項目結構

  3. 我對霸權的追求

  4. JavaScript 中 2 個有用的輪詢函數

  5. 不要加載隱藏的圖像

  6. 用Javascript格式化電話號碼

  7. 如何檢查文本是否是 Html 標籤(以及如何不做)

  1. 通過 Cordova 插件在 JavaScript 和 Java 之間進行通信

  2. COVID19 檢測結果 2 路短信

  3. WebGL 的前端介紹:為什麼選擇 WebGL?

  4. 這是另一個令人興奮的前端挑戰列表