JS Object物件的靜態函數

2020-07-16 10:05:10
JavaScript 原生提供 Object 型別物件,其他所有物件都繼承 Object,都是 Object 的範例。Object 原生方法分成兩類:Object 原型方法和 Object 靜態函數。
  • Object 原型方法定義在 Object.prototype 物件上,所有 Object 範例物件都會繼承這些方法。
  • Object 靜態函數就是定義在 Object 物件上的方法,通過 Object 直接呼叫,不需要範例繼承。

本節只介紹 Object 靜態函數,Object 原型方法會在後面幾節中詳細介紹,分別為:
  • JS toString() 
  • JS valueOf()
  • JS hasOwnProperty()
  • JS propertyIsEnumerable()
  • JS isPrototypeOf()

物件包裝函數

Object() 也是一個函數,它可以將任意值轉為物件。如果引數為空,或者為 undefined 和 null,Object() 將返回一個空物件。例如:
var obj = Object();
//等同於
var obj = Object(undefined);
var obj = Object(null);

範例

如果引數為陣列、物件、函數,則返回原物件,不進行轉換。根據這個特性,可以設計一個型別檢測函數,專門檢測一個值是否為參照型物件。
function isObject (value) {
    return value === Object (value);
}
console.log(isObject([]));  //true
console.log(isObject(true));  //false

物件建構函式

Object() 不僅可以當做工具函數使用,還可以當作建構函式使用。如果使用 new 命令呼叫 Object() 函數,將建立一個範例物件。例如,下面程式碼將建立一個新的範例物件。
var obj = new Object();

靜態函數

Object 物件包含很多靜態函數,簡單總結如下:
  • 遍曆物件
    Object.keys:以陣列形式返回引數物件包含的可列舉的私有屬性。
    Object.getOwnPropertyNames:以陣列形式返回引數物件包含的私有屬性名。
  • 物件屬性
    Object.getOwnPropertyDescriptor():獲取某個屬性的描述物件。
    Object.defineProperty():通過描述物件,定義某個屬性。
    Object.defineProperties():通過描述物件,定義多個屬性。
  • 物件狀態控制
    Object.preventExtensions():防止物件擴充套件。
    Object.isExtensible():判斷物件是否可延伸。
    Object.seal():禁止物件設定。
    Object.isSealed():判斷一個物件是否可設定
    Object.freeze():凍結一個物件。
    Object.isFrozen():判斷一個物件是否被凍結。
  • 物件原型
    Object.create():返回一個新的物件,並指定原型物件和屬性。
    Object.getPrototypeOf():獲取物件的 Prototype 物件。