深刻探究JavaScript對象系列(一)

       最近看了由大衛編寫、淘寶前端團隊翻譯的《JavaScript權威指南》第六版,對於js的對象有了一個初步的認識,寫這幾篇文章的目的第一也是鞏固下本身學習的東西,再者也但願能整理下js對象的基本語法和用法當作磚頭拋出去。javascript

 

一.JavaScript的總體概述

      對象是JavaScript的基本數據類型,能夠把JavaScript對象當作是屬性的無續集合(看有點像PHP中的關聯數組),每一個屬性都是一個鍵值對,除了字符串、數字、布爾值、null、undefined外,都是對象。前端

      在JavaScript中,對象能夠分紅3類:java

  •    內置對象:即由ECMAScript規範定義的對象或類,如數組、函數、日期和正則表達式等都是內置對象;
  •    宿主對象:由JavaScript解釋器所嵌入的宿主環境,最多見的就是Web瀏覽器定義的對象;
  •    自定義對象:由JavaScript代碼定義的對象。

 

二.JavaScript對象的建立

      建立對象的3種方法正則表達式

  1.   對象直接量:建立對象最簡單的方式。
    var empty = {};   //建立了一個沒有任何屬性的對象
    var point = {x:0, y:0, add: function(s,t){ return s+t;} };   //建立了一個具備兩個屬性和一個方法的對象    
    
    var book = {          //建立了一個有屬性值也爲對象的對象
     "title" : "JavaScript權威指南",
     「author" : {
          firstname : "David",
          secondname : "Flanagan"   
      }  
    };
    

      

  2. 經過關鍵字new建立對象:經過new運算符和一個構造函數來新建一個對象。
    var o = new Object();   //建立一個空對象,和var o ={};同樣
    var a = new Array();   //建立一個空數組,和 var a =[];同樣
    

      

  3. Object.create()函數:ECMAScript5中定義了這個靜態方法,其中第一個參數是要建立的對象的原型對象(prototype),第二個參數可選,用於對對象的屬性進行進一步的描述。(以後會對原型作進一步說明)
    var o = Object.create({x : 1 , y : 2});  //o繼承了屬性x和屬性y
    var o1 = Object.create(null);  //建立一個沒有原型的新對象
    
    function inherit(p){     //因爲ECMAScript3中沒有該方法,所以可使用該方法來模擬
    	if(p == null) throw TypeError(); 
    	if(Object.create) return Object.create(p);  
    
    	var t = typeof p;
    	if(t !== "object" && t !== "function") throw TypeError();
    	function f(){};
    	f.prototype = p;  //指定構造函數f的原型爲p
    	return new f();
    }
    

      

 

三.原型對象(prototype)和繼承

       prototype是JavaScript繼承的核心,全部的JavaScript對象都是經過原型對象來相互聯繫的。數組

       全部經過對象直接量建立的對象都具備同一個原型對象,並能夠經過Object.prototype得到對新建立對象的引用;經過關鍵字new和構造函數調用建立的對象的原型就是構造函數的prototype屬性的值。瀏覽器

       除了Object.prototype之外,其餘全部對象都有原型,且原型對象都是普通對象,全部的JavaScript內置構造函數以及大部分自定義的構造函數都具備一個直接或間接繼承自Object.prototype的原型,好比經過構造函數定義一個時間對象 var s = new Date(); 即s的原型對象就是Date.prototype,而Date.prototype又有本身的原型對象,即Object,prototype,這一系列連接的原型對象就是所謂「原型鏈」(prototype chain).函數

相關文章
相關標籤/搜索