最近看了由大衛編寫、淘寶前端團隊翻譯的《JavaScript權威指南》第六版,對於js的對象有了一個初步的認識,寫這幾篇文章的目的第一也是鞏固下本身學習的東西,再者也但願能整理下js對象的基本語法和用法當作磚頭拋出去。javascript
對象是JavaScript的基本數據類型,能夠把JavaScript對象當作是屬性的無續集合(看有點像PHP中的關聯數組),每一個屬性都是一個鍵值對,除了字符串、數字、布爾值、null、undefined外,都是對象。前端
在JavaScript中,對象能夠分紅3類:java
建立對象的3種方法正則表達式
var empty = {}; //建立了一個沒有任何屬性的對象 var point = {x:0, y:0, add: function(s,t){ return s+t;} }; //建立了一個具備兩個屬性和一個方法的對象 var book = { //建立了一個有屬性值也爲對象的對象 "title" : "JavaScript權威指南", 「author" : { firstname : "David", secondname : "Flanagan" } };
var o = new Object(); //建立一個空對象,和var o ={};同樣 var a = new Array(); //建立一個空數組,和 var a =[];同樣
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是JavaScript繼承的核心,全部的JavaScript對象都是經過原型對象來相互聯繫的。數組
全部經過對象直接量建立的對象都具備同一個原型對象,並能夠經過Object.prototype得到對新建立對象的引用;經過關鍵字new和構造函數調用建立的對象的原型就是構造函數的prototype屬性的值。瀏覽器
除了Object.prototype之外,其餘全部對象都有原型,且原型對象都是普通對象,全部的JavaScript內置構造函數以及大部分自定義的構造函數都具備一個直接或間接繼承自Object.prototype的原型,好比經過構造函數定義一個時間對象 var s = new Date(); 即s的原型對象就是Date.prototype,而Date.prototype又有本身的原型對象,即Object,prototype,這一系列連接的原型對象就是所謂「原型鏈」(prototype chain).函數