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