1.使用new操做符后跟Object构造函数javascript
var person = new Object(); person.name = "kitty"; person.age = 25;
person.__proto__(隐式原型)指向Object.prototype.java
2.由构造函数构造出来数组
function Car(sColor,iDoors,iMpg) { this.color = sColor; this.doors = iDoors; this.mpg = iMpg; this.showColor = function() { alert(this.color); }; } var oCar1 = new Car("red",4,23); var oCar2 = new Car("blue",3,25);
person.__proto__指向Car.prototype.
3.由函数Object.create构造函数
var person1 = { name: 'cyl', sex: 'male' }; var person2 = Object.create(person1);
JavaScript还支持对象和数组字面量,容许使用一种简洁而可读的记法来建立数组和对象。this
var person = { name : "kitty", age:25 };
function createCar(sColor,iDoors,iMpg) { var oTempCar = new Object; oTempCar.color = sColor; oTempCar.doors = iDoors; oTempCar.mpg = iMpg; oTempCar.showColor = function() { alert(this.color); }; return oTempCar; } var oCar1 = createCar("red",4,23); var oCar2 = createCar("blue",3,25); oCar1.showColor(); //输出 "red" oCar2.showColor(); //输出 "blue"
前面的例子中,每次调用函数 createCar(),都要建立新函数 showColor(),意味着每一个对象都有本身的 showColor() 版本。而事实上,每一个对象都共享同一个函数。javascript中没有什么static和成员变量之分,若是想在对象之间共享数据或方法,只能借助原型对象,将共享的变量和方法都放在原型对象中。prototype
function Car() {} Car.prototype.color = "blue"; Car.prototype.doors = 4; Car.prototype.mpg = 25; Car.prototype.drivers = new Array("Mike","John"); Car.prototype.showColor = function() { alert(this.color); } }; var oCar1 = new Car(); var oCar2 = new Car(); oCar1.drivers.push("Bill"); alert(oCar1.drivers); //输出 "Mike,John,Bill" alert(oCar2.drivers); //输出 "Mike,John,Bill"
联合使用构造函数和原型方式,就可像用其余程序设计语言同样建立对象。这种概念很是简单,即用构造函数定义对象的全部非函数属性,用原型方式定义对象的函数属性(方法)。结果是,全部函数都只建立一次,而每一个对象都具备本身的对象属性实例。设计
function Car(sColor,iDoors,iMpg) { this.color = sColor; this.doors = iDoors; this.mpg = iMpg; this.drivers = new Array("Mike","John"); } Car.prototype.showColor = function() { alert(this.color); }; var oCar1 = new Car("red",4,23); var oCar2 = new Car("blue",3,25); oCar1.drivers.push("Bill"); alert(oCar1.drivers); //输出 "Mike,John,Bill" alert(oCar2.drivers); //输出 "Mike,John"
JS的构造函数都有一个prototype属性,指向它的原型对象(其实就是个普通的JS对象)。经过同一个构造函数建立出来的对象,共享同一个原型对象。原型对象初始化的时候是空的,咱们能够在里面自定义任何属性和方法,这些方法和属性都将被该构造函数所建立的对象继承。若是原型发生了变化,那么全部实例都会跟着改变。code