js進階(類和對象)

來源:互聯網
上載者:User

標籤:style   io   ar   color   使用   sp   strong   on   問題   


1.工廠方式
工廠方式是指建立一個返回特定物件類型的工廠函數
eg.
  function createObject(){
    var object = new Object();
    object.username = "zhangsan";
    object.password = "123";

    object.get = function(){
      alert(this.username + ", " + this.password);
    }
    return object;
    }

  var object1 = createObject();
  var object2 = createObject();

  object1.get();
但是問題也來了,就是每建立一個對象,對象的方法是新對象,很浪費資源;

2.建構函式方式

方法類似:
eg.
  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);
它的問題與上面一樣;

3、原型方式
該方式利用了對象的prototype屬性,可把它看成建立新對象所依賴的原型。

eg.
  function Person(){
    Person.prototype.username = "zhangsan";

    Person.prototype.password = "123";

    Person.prototype.getInfo = function(){

      alert(this.username + ", " + this.password);
    }

  }

  var person = new Person();
  var person2 = new Person();

  person.getInfo();

  person2.getInfo();

使用原型的缺點:

  1.不能傳參數;

  2.所有對象共用屬性,有可能會導致程式錯誤。

 

  如果使用原型方式來定義對象,那麼產生的所有對象會共用原型中的屬性,這樣一個對象改變了該屬性也會反映到其他對象當中。

  單純使用原型方式定義對象無法在建構函式中為屬性賦初值,只能在對象產生後再去改變屬性值。

4.混合的建構函式/原型方式
eg.
  function Person(name){
    this.name = name;
  }
  Person.prototype.say = function(){
    alert("I am "+this.name);
  }
  var p1 = new Person("wang");
  var p2 = new Person("li");
  p1.say();
  p2.say();
  alert(p1.say==p2.say); 
5、動態原形方式
在建構函式中通過標誌量讓所有對象共用一個方法,而每個對象擁有自己的屬性。
eg.

  function Person(){
    this.username = "zhangsan";
    this.password = "123";

    if(typeof Person.flag == "undefined"){
      Person.prototype.getInfo = function(){
        alert(this.username + ", " + this.password);
      }

      Person.flag = true;

    }
  }

  var p = new Person();
  var p2 = new Person();

  p.getInfo();
  p2.getInfo();

對象之間的屬性互不干擾,各個對象間共用同一個方法.

js進階(類和對象)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.