js 創建(new)一個對象的過程


1: 對象字面量的方式
let o = {}
2: 通過Object.create()
let o = Object.create({})
3: 通過new 構造函數的方式
let o = new Object()



   function Person(name) {
       this.name = name
   }

   
   Person.prototype.getName = function () {
       return this.name
   }


   var ObjectFactory = function () {
       // 創建一個對象
       var obj = new Object()
       // 返回第一個參數作為構造函數
       var Constructor = [].shift.call(arguments)
       // 將構造函數的原型復制於對象的原型
       obj.__proto__ = Constructor.prototype
       // 調用構造函數,並將obj 作為this, arguments作為參數
       var ret = Constructor.apply(obj, arguments)
       // 如果構造函數里返回一個對象的話,就直接返回,否則我們就返回this即new創建的對象
       return typeof ret === 'object'? ret: obj
   }


   var a = ObjectFactory(Person, 'sven')
   console.log(Object.getPrototypeOf(a) === Person.prototype)



   // 效果等效
   var a = ObjectFactory(Person, 'sven')
   var a = new Person('sven ')

   

   如果構造函數用return 顯示的返回一個對象,那么new之后,會返回這個對象。
   如果構造函數不顯示的返回任何數據,或返回一個非對象類型的數據,則默認返回this指定的對象。即構造函數生成的對象。

   


參考:https://www.jianshu.com/p/60d1b79974bd


免責聲明!

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



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