Object.create()和Object.defineProperties()創建對象的區別

一、Object.create()創建對象

詳情鏈接:點擊

    'use strict';
    /*
    1. Object.create(prototype, [descriptors])
  * 作用: 以指定對象爲原型創建新的對象
  * 爲新的對象指定新的屬性, 並對屬性進行描述
    value : 指定值
    writable : 標識當前屬性值是否是可修改的, 默認爲 false
    */
    var obj1 = {
        name: 'muzidigbig',
        age: 23
    };
    var obj2 = Object.create(obj1, {
        sex:{
            value:'男',
            writable:true,
        }
    });
    console.log(obj2);

二、Object.defineProperties()創建對象

詳情鏈接:點擊

    /*
    2. Object.defineProperties(object, descriptors)
  * 作用: 爲指定對象定義擴展多個屬性
    * get :用來獲取當前屬性值得回調函數
    * set :修改當前屬性值得觸發的回調函數,並且實參即爲修改後的值

   * 存取器屬性:setter,getter一個用來存值,一個用來取值
    */
    var obj3 = {};
    Object.defineProperties(obj3, {
        fullName: {
            get: function () { //當你獲取當前擴展屬性值的時候,返回的就是當前屬性的值
                return this.firstName + ' ' + this.lastName;
            },
            set: function (msg) { //監視當前屬性值,當屬性值發生改變的時候自動調用。
                var names = msg.split(' ');
                this.firstName = names[0];
                this.lastName = names[1];
            }
        }
    });
    obj3.fullName = "muzidigbig Lee";
    console.log(obj3);
    console.log(obj3.fullName);

這兩種方式沒有什麼區別,只是用了底層的方式來實現。

    /*
    2等同於下面擴展對象的方式
    */
    var obj4 = {
        username: 'honghong',
        age:24,
        get usernameAge() {
            return this.username + " " + this.age;
        },
        set usernameAge(msg) {
            var names = msg.split(' ');
            this.username = names[0];
            this.age = names[1];
        }
    };
    obj4.usernameAge = "guanyu 22"
    console.log(obj4);
    console.log(obj4.username);

 

總結:

Object.create()是繼承於某個對象創建的新對象,Object.defineProperties()是對對象屬性的擴展。

 

 

 

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