直接定義在Object對象的方法
Object.print = function (o) { console.log(o); }
print方法就是直接定義在Object對象上數組
定義在Object原型對象Object.prototype上的方法,能夠被Object實例直接使用
Object.prototype.print = function () { console.log(this); }; var obj = new Object(); obj.print() // Object
Object.prototype定義了一個print方法,而後生成一個Object的實例obj,obj直接繼承了Object.prototype的屬性和方法,因此能夠直接使用obj.print調用print方法,實質上就是obj對象的print方法就是調用Object.prototype.print方法函數
凡是定義在Object.prototype對象上面的屬性和方法,將被全部實例對象共享工具
Object自己是一個函數,能夠看成工具方法使用,將任意值轉爲對象此方法經常使用於保證某個值必定是對象this
var obj = Object(); // 等同於下面兩條語句 var obj = Object(undefined); var obj = Object(null); obj instanceof Object // true
var obj = Object(1); obj instanceof Object // true obj instanceof Number // true var obj = Object('foo'); obj instanceof Object // true obj instanceof String // true
var arr = []; var obj = Object(arr); // 返回原數組 obj === arr // true var fn = function() {}; var obj = Object(fn); // 返回原函數 obj === fn // true // 一個判斷變量是否爲對象的函數 function isObject(value) { return value === Object(value); } isObject([]) // true isObject(true) // false
經過var obj = new Object()
的寫法生成新對象,與字面量的寫法var obj = {}
是等價的
使用時,能夠接受一個參數,若是該參數是一個對象,則直接返回這個對象,若是是一個原始類型的值,則返回該值對應的包裝對象prototype
var o1 = {a: 1}; var o2 = new Object(o1); o1 === o1 // true var obj = new Object(123); obj instanceof Number // true
Object(value)
表示將value轉成一個對象new Object(value)
表示生成一個對象,它的值是value用來遍歷對象的屬性
Object.keys
方法的參數是一個對象,返回一個數組,該數組的成員都是該對象自身的全部屬性名,而不是繼承的屬性名code只返回可枚舉的屬性對象
var obj = { p1: 123, p2: 456, }; Object.keys(obj) // ["p1", "p2"]
用來遍歷對象的屬性接受一個對象做爲參數,返回一個數組,包含了該對象自身的全部屬性名繼承
還返回不可枚舉的屬性名ip
var obj = { p1: 123, p2: 456, }; Object.keys(obj) // ["p1", "p2"] var a = ["hello", "hi"]; Object.keys(a) // ["0", "1"] Object.getOwnPropertyNames(a) // ["0", "1", "length"]
能夠用上面兩個方法提供計算對象屬性個數的方法原型鏈
var obj = { p1: 1, p2: 2 }; Object.keys(obj).length // 2 Object.getOwnPropertyNames(obj).length // 2
對象屬性模型的相關方法
Object.getOwnPropertyDescriptor()
:獲取某個屬性的描述對象
Object.defineProperty()
:經過描述對象,定義某個屬性
Object.defineProperties()
:經過描述對象,定義多個屬性
控制對象狀態的方法
Object.preventExtensions()
:防止對象擴展
Object.isExtensible()
:判斷對象是否可擴展
Object.seal()
:禁止對象配置
Object.isSealed()
:判斷一個對象是否可配置
Object.freeze()
:凍結一個對象
Object.isFrozen()
:判斷一個對象是否被凍結
原型鏈相關方法
Object.create()
:該方法能夠指定原型對象和屬性,返回一個新的對象
Object.getPrototypeOf()
:獲取對象的Prototype對象
定義在Object.prototype對象,全部Object的實例對象都繼承了這些方法
Object.prototype.valueOf()
:返回當前對象對應的值Object.prototype.toString()
:返回當前對象對應的字符串形式Object.prototype.toLocaleString()
:返回當前對象對應的本地字符串形式Object.prototype.hasOwnProperty()
:判斷某個屬性是否爲當前對象自身的屬性,仍是繼承自原型對象的屬性Object.prototype.isPrototypeOf()
:判斷當前對象是否爲另外一個對象的原型Object.prototype.propertyIsEnumerable()
:判斷某個屬性是否可枚舉