JS創建自定義對象的6種方法


創建自定義對象的方法

1.工廠模式:

function createPerson (name, obj, job) {

  var o = new Object()

  o.name = name

  o.sayName = function () {

    alert(this.name)

  }

  return o

}

缺點:未解決對象識別的問題。

2.構造函數

  function Person (name, age, job) {

    this.name = name

    this.age = age

    this.job = job

    this.sayName = function () {

      alert(this.name)

    }

 

  }

優點:解決了對象識別的問題

缺點:方法未實現共享

3. 原型模式

  function Person () {}

  Person.prototype.name = '四點鍾',

  Person.prototype.job = '前端'

  Person.prototype.sayName = function () {

    alert(this.name)

  }

優點:實現了方法的共享,也規避了對象識別問題

缺點:無法傳遞初始化參數,不僅方法被共享,所有屬性也被共享了,更改了一個實例,所有實例都有可能受到影響。

4.構造函數 + 原型模式

  function Person (name, age, job) {

    this.name = name

    this.age = age

    this.job = job

  }

  Person.prototype = {

    constructor: Person,

    sayName: function () {

      alert(this.name)

    } 

  }

優點:解決對象識別問題。解決屬性的共享。

缺點: 無。

 

5.寄生構造函數

  function SpecialArray (name, job, age) {

    var values = new Array()

    values.push.apply(values, arguments)

    values.toPipedString = function () {

      return this.join('|')

    }

 

    return values

  }

 優點: 能夠在不影響原有對象(Array)的基礎上,進行擴展

 缺點:不能確定對象類型,且實例和構造函數無任何關系

 

6.穩妥構造函數

  function Person (name, age, job) {

    var o = new Object()

    o.sayName = fucntion () {

      alert(name)

    }

    return o

  }

  var friend = Person('四點鍾', 29, '前端')

  firend.sayName()

  優點:除了調用sayName方法以外,無法訪問到傳入到構造函數中的原始數據成員。不使用this,不使用new運算符操作構造函數

  缺點: 還是不能識別對象。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM