JavaScript 中 Object ,Prototype 相關的屬性和方法

1.Objuect 類型 Object 類型是全部對象的基類型,能夠用 new 運算符產生一個 Object 類型。 開發者能夠經過產生 Object 類型的實例並向其動態添加屬性和方法來產生本身須要的 對象。如: var o = new Object (); ECMAScript 要求僅當構造函數須要參數時才須要括號,若是沒有參數,括號能夠省 略(不推薦這種作法)。如: var o = new Object ; //legal, but not recommended 每個 Object 類型的實例都有以下的屬性和方法: constructor -- 產生對象所使用的函數。 hasOwnProperty ( propertyName )-- 代表給定的屬性是否存在於對象的實例而非原 型上,propertyName 必須是一個字符串或字符串類型的變量。 isPrototypeOf ( object )-- 檢查對象是不是參數對象實例的原型。 propertyIsEnumerable ( propertyName )-- 代表參數所給定的屬性是否能夠在 for - in 語句中進行枚舉。參數必須是一個字符串或字符串變量。 toLocaleString ()-- 返回一個本地化了的對象的字符串表示。 toString ()-- 返回對象的字符串表示。 valueOf ()-- 返回一個與對象相對應的字符串、數值或布爾值。一般與 toString () 返回的結果是相同的。 由於在 ECMAScript 中,Object 是全部對象的基類型,因此,每個對象都擁有這些 基本的屬性和方法。可是,像 BOM BOM 這些瀏覽器對象和文檔對象,他們的實現與宿 主環境有關,不受 ECMA - 262 的制約,他們不必定是直接從 Object 所繼承而來。 2.原型(prototype) 每當一個函數產生時,它的 prototype 屬性也將根據某些特定的規則產生。默認狀況 下,全部的 prototype 自動地得到一個名稱爲 constructor 的屬性,該屬性指向以該原 型做爲屬性的函數。能夠用 isPrototypeOf () 方法來判斷一個對象(類)是否爲某個對 象實例的原型。如: alert ( Person . prototype . isPrototypeOf ( person1 )); alert ( Person . prototype . isPrototypeOf ( person2 )); ECMAScript 5 增長了一個叫作 Object . getPrototypeOf () 的方法,該方法存在於 Object 類型上,能夠認爲是一個靜態方法。該方法用於得到一個對象實例的原型。支 持該方法的瀏覽器有 IE 9 +, Firefox 3.5 +, Safari 5 +, Opera 12 +, and Chrome。 其用法如: alert ( Object . getPrototypeOf ( person1 ) == Person . prototype ); alert ( Object . getPrototypeOf ( person1 ). name ); 3.實例屬性與原型屬性 當一個屬性被添加到對象的實例上後,該屬性會屏蔽在原型上與之同名的任何屬性 (但能夠經過實例的 prototype 訪問原型上的屬性)。對於實例上屬性的改變不會影 響到原型上相同名稱的屬性。 delete 運算符能夠刪除實例上的屬性,使得原型上相應的屬性能夠被直接訪問。 hasOwnProperty () 方法能夠斷定一個屬性是存在於對象的實例上仍是原型上。該 方法繼承自 Object。僅當屬性存在於對象實例上時該方法返回 true,不然,返回 false。如: alert ( person1 . hasOwnProperty ( "name" )); 4.原型和 in 運算符 in 運算符有兩種使用方法:單獨使用或在 for - in 循環語句中使用。單獨使用 時,若是對象指定名稱的屬性能夠訪問,結果就是 true。這意味着,該屬性可能存在 於實例上,也多是存在於原型上。結合 hasOwnProperty () 方法與 in 運算符能夠 斷定對象的屬性是否僅存在於原型上,如: function onlyHasPrototypeProperty ( object , name ){ return ! object . hasOwnProperty ( name ) && ( name in object ); } 當在 for - in 語句中使用 in 運算符時,對象全部可訪問可枚舉的屬性都將被 返回,包括實例屬性和原型屬性。屏蔽原型上不可枚舉的實例屬性也將被返回,由於 開發者定義的屬性都是可枚舉的。但在 IE8 - 上倒是例外。如: var o = { toString : function () { return "My Object" ; } }; for ( var prop in o ) { if ( prop == 「toString」 ) { alert ( "Found toString" ); //won’t display in Internet Explorer } } 這使得在 IE8 - 上,全部 Object 上的屬性和方法都不能夠被枚舉。 5.對象屬性的枚舉 ECMAScript 5 提供一個 Object . keys () 方法用於檢索對象上全部可枚舉的實例 屬性。它接受一個對象做爲參數,並返回一個字符串數組,包含全部檢索到的屬性的 名稱。如: function Person () { } Person . prototype . name = "Nicholas" ; Person . prototype . age = 29 ; Person . prototype . job = "Software Engineer" ; Person . prototype . sayName = function () { alert ( this . name ); }; var keys = Object . keys ( Person . prototype ); alert ( keys ); //」name,age,job,sayName」 var p1 = new Person (); p1 . name = "Rob" ; p1 . age = 31 ; var p1keys = Object . keys ( p1 ); alert ( p1keys ); //」name,age」 getOwnPropertyNames () 方法用於檢索對象全部可枚舉和不可枚舉的實例屬性。 var keys = Object . getOwnPropertyNames ( Person . prototype ); alert ( keys ); //"constructor,name,age,job,sayName" var keys = Object . getOwnPropertyNames ( p1 ); alert ( keys ); //"name,age" for ( var prop in p1 ) { alert ( prop ); //依次輸出:name,age,job,sayName } 支持 Object . keys () Object . getOwnPropertyNames () 方法的瀏覽器有 IE9 +, Firefox 4 +, Safari 5 +, Opera 12 +, Chrome。
做者: Cloudy Waterman
水平有限,文中錯誤不妥在所不免,歡迎批評指正建議評論。文章將不按期修改完善斧正。轉載請註明出處,謝謝!
相關文章
相關標籤/搜索