10th blog:Object
Object(對象)是在所有的編程語言中都十分重要的一個概念,對于事物我們可以把他們看作是一個對象,而每一個事物都有自己的表示的屬性和對于某一信息作出的相應的操作。而這些東西就變成了事物的屬性和方法。
JavaScript 原生提供Object對象(注意起首的O是大寫),所有其他對象都繼承自這個對象。Object本身也是一個構造函數,可以直接通過它來生成新對象。
例:var obj = new Object();
?
Object作為構造函數使用時,可以接受一個參數。如果該參數是一個對象,則直接返回這個對象;如果是一個原始類型的值,則返回該值對應的包裝對象。
var o1 = {a: 1}; var o2 = new Object(o1); o1 === o2 // true new Object(123) instanceof Number // true注意:通過new Object()的寫法生成新對象,與字面量的寫法o = { }是等價的。如果要在Object對象上面部署一個方法,有兩種做法。
1)部署在Object對象本身
比如,在Object對象上面定義一個print方法,顯示其他對象的內容。
2)部署在Object.prototype對象
所有構造函數都有一個prototype屬性,指向一個原型對象。凡是定義在Object.prototype對象上面的屬性和方法,將被所有實例對象共享。、
上面代碼在Object.prototype定義了一個print方法,然后生成一個Object的實例o。o直接繼承了Object.prototype的屬性和方法,可以在自身調用它們,也就是說,o對象的print方法實質上是調用Object.prototype.print方法。。
可以看到,盡管上面兩種寫法的print方法功能相同,但是用法是不一樣的,因此必須區分“構造函數的方法”和“實例對象的方法”。
?
Object的靜態方法(所謂“靜態方法”,是指部署在Object對象自身的方法):
Object.keys(),Object.getOwnPropertyNames()
Object.keys方法和Object.getOwnPropertyNames方法很相似,一般用來遍歷對象的屬性。它們的參數都是一個對象,都返回一個數組,該數組的成員都是對象自身的(而不是繼承的)所有屬性名。它們的區別在于,Object.keys方法只返回可枚舉的屬性,Object.getOwnPropertyNames方法還返回不可枚舉的屬性名。
? ??
對于一般的對象來說,這兩個方法返回的結果是一樣的。只有涉及不可枚舉屬性時,才會有不一樣的結果。
?
?
對于一般的對象來說,這兩個方法返回的結果是一樣的。只有涉及不可枚舉屬性時,才會有不一樣的結果。
由于JavaScript沒有提供計算對象屬性個數的方法,所以可以用這兩個方法代替。
1)Object.keys(o).length 2)Object.getOwnPropertyNames(o).length?
Object的其他方法
(1)對象屬性模型的相關方法
- Object.getOwnPropertyDescriptor():獲取某個屬性的attributes對象。
- Object.defineProperty():通過attributes對象,定義某個屬性。
- Object.defineProperties():通過attributes對象,定義多個屬性。
- Object.getOwnPropertyNames():返回直接定義在某個對象上面的全部屬性的名稱。
(2)控制對象狀態的方法
- Object.preventExtensions():防止對象擴展。
- Object.isExtensible():判斷對象是否可擴展。
- Object.seal():禁止對象配置。
- Object.isSealed():判斷一個對象是否可配置。
- Object.freeze():凍結一個對象。
- Object.isFrozen():判斷一個對象是否被凍結。
(3)原型鏈相關方法
- Object.create():該方法可以指定原型對象和屬性,返回一個新的對象。
- Object.getPrototypeOf():獲取對象的Prototype對象。
轉載于:https://www.cnblogs.com/Styleshah/p/9914645.html
總結
以上是生活随笔為你收集整理的10th blog:Object的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Gym 101933 A(dp)
- 下一篇: C#数组 动态添加元素