最近看了由大卫编写、淘宝前端团队翻译的《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).函数