【javascript筆記】全域對象和Object對象

來源:互聯網
上載者:User

  javascript中的全域對象,全域對象是一個父級的構造,所有的其他的對象,變數和函數都屬於全域對象。還有一種是Object對象,javascript中的其他對象都是從Object繼承而來,包括內建對象。

一全域對象

1 全域對象的特性

  • 全域對象只是一個對象,而不是類。既沒有建構函式,也無法執行個體化一個新的全域對象。
  • 全域對象不是任何對象的屬性,所以它沒有名稱。
  • 全域對象是預定義的對象,作為 JavaScript 的全域函數和全域屬性的預留位置。
  • 在頂層 JavaScript 代碼中,可以用關鍵字 this 引用全域對象。
  • 全域對象是範圍鏈的頭,意味著在頂層 JavaScript 中聲明的所有變數都將成為全域對象的屬性。
  • 通常不必用 this 引用全域對象,因為所有非限定性的變數和函數名都會作為全域對象的屬性來查詢。
  • 通過使用全域對象,可以訪問所有其他預定義的對象、函數和屬性。
  • 全域對象的預定義屬性都是可枚舉的,所以可以用 for/in 迴圈列出所有隱式或顯式聲明的全域變數

  全域對象是頂層的上下文環境,其他所有對象都屬於全域對象。在web開發中,全域對象為範圍提供了最頂層的上下文環境,並為web開發所依賴的某些高層瀏覽器功能提供了共用的平台。除此之外,全域對象還包括以下內容:

  • javascript中所有內建的對象
  • javascript中常用的內建屬性
  • javascript中某些內建函數
  • 某些特定的瀏覽器對象,例如document和window對象

  對於範圍,全域對象也提供了非常有用的功能。當引用一個變數時,在當前範圍中並未找到該變數時,解譯器就會沿著範圍鏈向上移動,並沿著範圍鏈尋找該變數,直到查到全域對象。如果始終無法找到該變數,解譯器會認為該變數不存在,並觸發一個異常,當在全域範圍中時,可以使用關鍵字this訪問全域對象。

2 瀏覽器中的全域對象

  在瀏覽器中,全域對象有著特殊的用途。除儲存javascript中所有普通功能和作為全域上下文環境外,還容納了大量特定於瀏覽器的對象。例如window和document對象。window對象很有意思,window屬性是一個自引用的成員。既可以通過window.property訪問變數,也可以簡單的使用property來訪問變數。這是因為javascript具有一個全域對象,同時又具有一個本質上與其相同的window對象。

  在瀏覽器中,每個視窗,iFrame和選項卡都具有自己唯一的全域對象。在某些情況下,可以通過DOM在這些範圍之間進行通訊,但在通常情況下這些範圍都是相互獨立和隔離的。

執行個體一

擷取全域對象

1   <script type="text/javascript">
2 function getGlobalObject(){
3 return (function(){
4 return this;
5 }).call(null);
6 }
7 var globalobj=getGlobalObject();
8 alert(globalobj);
9 </script>

注意事項:有些全域屬性可以被重寫,例如undefined

 

二 Object對象

  Object對象是javascript語言中其他對象的基類,通過Object,開發人員可以在運行時執行個體化使用者自訂的對象。

  屬性列表

  • Object.constructor
  • Object.prototype
  • Obect._parent_
  • Object._proto_

  方法列表

  • Object.eval()
  • Object.hasOwnProperty()
  • Object.isPrototypeOf()
  • Object.propertyIsEnumerable()
  • Object.toLocaleString()
  • Object.toSource()
  • Object.toString()
  • Object.unwatch()
  • Object.valueOf()
  • Object.watch()
  • Object._defineGetter_0
  • Object._defineSetter_0
  • Object._lookupGetter_0
  • Object._lookupSetter_0
  • Object._noSuchMethod_0

Object對象:

  1. 當在完全可控的環境中開發javascript時,使用原型繼承擴充javascript基類是一種安全的實踐
  2. valueOf()方法和toString()方法  區別:valueOf()方法返回一個對象的基本值,而toString()方法則用於返回對象中最用用的文本值。

執行個體二

合并對象

<script type="text/javascript">Object.prototype.merge=function(obj){//確保所處理的是一個有效對象if(typeof this=="object" && obj && typeof obj=="object"){for(var arg in obj){if(typeof obj[arg]=="object" && !obj[arg].length){if(!this[arg]){this[arg]={};}this[arg].merge(obj[arg]);}else{this[arg]=this[arg]||obj[arg];}}}}var person={name:"unkonwn",age:0,height:"no",weight:"no",occupation:"no",children:{count:0,names:[]}}var kycool={name:"keyool",age:25,occupation:"code man"}kycool.merge(person);for(var m in kycool){document.write(m+":"+kycool[m]+"<br/>");}  </script>

 運行結果:

name:keyoolage:25occupation:code manmerge:function(obj){ //確保所處理的是一個有效對象 if(typeof this=="object" && obj && typeof obj=="object"){ 
     for(var arg in obj){ if(typeof obj[arg]=="object" && !obj[arg].length){ if(!this[arg]){ this[arg]={}; } 
      this[arg].merge(obj[arg]); }else{ this[arg]=this[arg]||obj[arg]; } } } }height:noweight:nochildren:[object Object]

 重寫isType系類函數

//=====================isType系列====================//Object.isArray=function(obj){//檢查參數是否是對象,並且其建構函式是數組建構函式return (typeof obj =="object" && obj.constructor==Array);}Object.isDate=function(obj){//檢查參數是否是對象,並且其建構函式是日期對象的建構函式return (typeof obj =="object" && obj.constructor==Date);}Object.isNumberObject=function(obj){//檢查參數是否是對象,並且其建構函式是Number對象的建構函式return (typeof obj=="object" && obj.constructor==Number);}Object.isStringObject=function(obj){//檢查參數是否是對象,並且其建構函式是String對象的建構函式return (typeof obj=="object" && obj.constructor==String);}Object.isBooleanObject=function(obj){//檢查參數是否是對象,並且其建構函式是Boolean對象的建構函式return (typeof obj=="object" && obj.constructor==Boolean);}Object.isFunction=function(obj){//檢查參數是否是函數對象return (typeof obj=="function");}Object.isObject=function(obj){//檢查參數是否是對象return ((typeof obj=="object" && !!obj)||(typeof obj=="function"));}Object.isRegex=function(obj){//檢查參數是否是RegExp對象return (typeof obj=="object" && obj.constructor==RegExp);}Object.isString=function(obj){//檢查參數是否是字串return (typeof obj=="string");}Object.isNumber=function(obj){//檢查參數是否是數值return (typeof obj=="number" && isFinite(obj));}Object.isBoolean=function(obj){//檢查參數是否是布爾型return (typeof obj=="boolean");}Object.isUndefined=function(obj){//檢查參數是否是undefinedreturn (typeof obj=="undefined");}Object.isNull=function(obj){//檢查參數是否是nullreturn (typeof obj=="object" && !obj);}

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.