javascript系列之構造對象

構造函數模式

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

相關文章
相關標籤/搜索