物件的 可列舉 到底有啥用?

2021-07-25 17:30:40 字數 2575 閱讀 9690

可列舉屬性有什麼作用?用在什麼場景下,什麼業務下?

var god = }}

};var news = ;

},methods:

}};// 然後我們可以這樣訪問

god.extends('name',news);

god.name.methods.show();

看我們前面的**,god是乙個母物件,意思就說我們協作開發,一般由專案組長或技術經理來開發god這個類。

news就是我們的業務物件,由我們的隊友來開發,一旦我們開發完成之後,我們只需要關注這個類有什麼資料,這些資料怎麼去呼叫。

我們的god來進行適配,把這個news物件整合到我們的業務中。

上面的**我就實現了,只要使用god.extends('name',news);整合進來,我們就可以使用god.name訪問原本news物件定義的屬性或方法。

methods:

}

注意:news物件中,我們是使用this.id獲取的news物件裡data()中的資料。

我們知道如果你不作任何處理,是不能這樣使用的,現在能這樣使用是因為,我們在god中通過object.assign()方法作了處理。

god裡面如果有一些屬性,比如version:'1.0',那麼如果我們在news(子物件裡)如何通過以下**來得到呢?

alert(this.$global.version)
開始:

var god = }},

init();

keys.foreach((key)=>);

}};var

news = ;

},methods:

}};// 然後我們可以這樣訪問

分析:god中定義了乙個init()方法,完成屬性遍歷賦值給this.$global。然後在extends()裡呼叫,在object.assign()的時候把this也傳了進去。

這樣news中就可以通過this.$global拿到god物件version屬性的值。

剛才我們的舉動把母物件一些「子物件不能用或者不需要用的」屬性也給合併進去了。

怎麼解決,上**:

var god = }},

init());

object.defineproperty(this,'extends',);

var keys = object.keys(this); // 列舉出this當前是所有屬性

this.$global = {};

keys.foreach((key)=>);

}};var

news = ;

},methods:

}};// 然後我們可以這樣訪問

god.extends

('name',news);

god.name.methods.show

();

分析:我們通過object.defineproperty來設定那些屬性不可列舉

// 把god物件的這2個屬性的enumerable設定為false

object.defineproperty(this,'init',);

object.defineproperty(this,'extends',);

上**我們把initextends都設定了false。

我們測試看看:

只列印出version。如果不寫:

列印出god的所有子物件(屬性)。

裝飾器到底有啥用?

我們要增強乙個已經完成的函式的功能,比如,在now 函式呼叫前後自動列印日誌,但又不希望修改now 函式的定義,這種在 執行期間動態增加功能的方式,稱之為 裝飾器 decorator 本質上,decorator就是乙個返回函式的高階函式。def log func def args,kw print ...

MySQL唯讀事務到底有啥用?

很多人認為mysql唯讀事務沒啥用,有點雞肋,以前我也這麼認為,自從認真研究了事務的隔離級別和事務的併發問題後,發現這個唯讀事務其實並不是大家想象的那麼無用。下面舉乙個實際開發中可能會遇到的例子來說明唯讀事務的作用。展示使用者列表的需求,後台從資料庫查詢使用者列表返回給前端分頁展示,分頁通過資料庫的...

牛逼哄哄的 RabbitMQ 到底有啥用?

mq全稱為message queue,訊息佇列 mq 是一種應用程式對應用程式的通訊方法。應用程式通過讀寫出入佇列的訊息 針對應用程式的資料 來通訊,而無需專用連線來鏈結它們。訊息傳遞指的是程式之間通過在訊息中傳送資料進行通訊,而不是通過直接呼叫彼此來通訊,直接呼叫通常是用於諸如遠端過程呼叫的技術。...