对象是js的基本数据类型,准确来讲除了字符串,数字,boolean值,null与undifine以外,js中的值都是对象。js中的对象是一种复合值,他将不少值(原始值或其余对象)聚合在一块儿,能够经过名字来访问这些值,其实看上去就像是一个属性的无序集合,每一个属性都是一个名/值对。属性名是字符串,能够把对象当作是从字符串到值得映射。这种现象就像咱们平时知道的“关联数组”,“数据字典”等等(只是叫法不一样而已)。除了这种映射关系外,最主要的核心就是js的对象能够经过“原型继承”来继承属性与方法。另外因为对象时可变的,咱们是经过引用而非值来操做对象。html
var empty = {}; // 定义一个空对象 var ob1 = {x:1,y:2}; // 定义两个属性的对象 var ob2 = { // 定义复杂的对象 "main title" : "three object", "main-t" : 123, // 特殊字符要加引号 "for" : {x:"123",y:123}, // for是保留字必须用引号 };
var arr = new Array(); // 使用内置构造函数建立一个新的数组对象,至关于var arr = []; var obg = new Object(); // 使用内置构造函数建立一个新的数组对象,至关于var arr = {}; function UserDefineObj (x,y) { // 自定义的构造函数 this.x = x; this.y = y; } var user = new UserDefineObj(1,2); // 使用自定义的构造函数建立一个对象
var ob1 = Object.create ( {x : 1, y : 2 } ); // 使用后面的参数(对象直接量)做为ob1对象的原型。
若是想建立一个空对象(好比经过{ }或newObject()建立的对象)可使用Object.prototype做为这个方法的参数。例如:正则表达式
var ob2 = Object.create ( { } ) ; // 建立一个空对象
若是传入参数为null,将会建立一个没有任何原型的空对象,但这个对象没有任何继承的方法,甚至不包括基础的方法,如toString()等。json
var ob3 = Object.create (null); // ob3不继承任何属性和方法
function UserDefineObj (x,y) { // 自定义的构造函数 this.x = x; this.y = y; } var user = new UserDefineObj(1,2); // 使用自定义的构造函数建立一个对象 console.log(user.toString()); // toString这个方法就是继承自Object.prototype
关于原型与原型链推荐博客:http://www.cnblogs.com/TomXu/archive/2012/01/05/2305453.html数组
function UserDefineObj (x,y) { // 自定义的构造函数 this.x = x; // 声明自定义属性x,也成为自有属性 this.y = y; // 声明自定义属性y } UserDefineObj.prototype.allx = 123; // 给构造函数的原型对象添加属性allx var user = new UserDefineObj(1,2); // 使用自定义的构造函数建立一个对象 console.log(user.x); // 输出:1 console.log(user.allx); // 输出:123
因为js是一种弱类型的语言,在不声明变量的状况下,解析器会自动的再运行的时候建立这个变量(全局变量)。函数
function UserDefineObj (x,y) { // 自定义的构造函数 this.x = x; // 声明自定义属性x,也成为自有属性 this.y = y; // 声明自定义属性y } UserDefineObj.prototype.allx = 123; // 给构造函数的原型对象添加属性allx var user = new UserDefineObj(1,2); // 使用自定义的构造函数建立一个对象 var ob = new UserDefineObj(4,5); console.log(user.x); // 输出:1 console.log(ob.x); // 输出:4 console.log(user.allx); // 输出:123 console.log(ob.allx); // 输出:123 user.allx = 110; // 更改user对象的属性,对ob对象没有影响 console.log(user.allx); // 输出:110 console.log(ob.allx); // 输出:123
从上面程序的输出能够看出user对象和ob对象建立了两个不一样的对象,这两个对象同时共同继承自原型对象UserDefineObj.prototype。因为是不一样的对象,因此对属性的值得改变,对其余的对象没有影响。this