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

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



 ```javascript


    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



















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章