国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript中創(chuàng)建原子的方法總結(jié)

2024-05-06 15:31:07
字體:
供稿:網(wǎng)友

前言

原子操作這是Java多線程編程的老生常談了。所謂原子操作是指不會被線程調(diào)度機制打斷的操作;這種操作一旦開始,就一直運行到結(jié)束,中間不會有任何 context switch (切換到另一個線程)。

當(dāng)然JS是單線程的,所以不存在線程打斷這么一說,我只是從Java中借引了這么一個概念。如果一段JS代碼在執(zhí)行過程中沒有未知操作被引入,那么這段代碼就是100%可控和安全的,這就是原子操作。反之非原子操作可能會因為外界操作的引入導(dǎo)致代碼變得難以控制而產(chǎn)生隱晦的bug。

JavaScript中可以通過Object.create(null)來創(chuàng)建原子,這是非常自然而又易于理解的方式。不過也有一些其它的方法來實現(xiàn)相同的效果,雖然在概念上有所不同,但是它們創(chuàng)建的一樣是“原子對象”。

創(chuàng)建原子

使用Object.create()

// 方法1atom = Object.create(null)

使用Object.setPrototypeOf()

// 方法2atom = Object.setPrototypeOf(new Object, null)// ORatom = Object.setPrototypeOf({}, null)

重置構(gòu)造器的原型屬性

// 方法3function MyObject() { // ...}Object.setPrototypeOf(MyObject.prototype, null);atom = new MyObject;

重置類的原型

注:“非派生類(沒有extends聲明的類)”,與將一個普通函數(shù)用作構(gòu)造器時的特性基本一致。

class MyClass { // ...}Object.setPrototypeOf(MyClass.prototype, null);atom = new MyClass;

使用派生自null值的類

JavaScript在處理extends null時會將MyClass.prototype的原型置為null,因此這個類構(gòu)建的實例自然就是atom。但是,派生自null值的類無法直接構(gòu)建,因此需要聲明自己的構(gòu)造方法(以該方法創(chuàng)建和返回的對象作為this)。

// 方法4class MyClass extends null { constructor() { return Object.create(new.target.prototype); }}atom = new MyClass;

上例在實現(xiàn)構(gòu)造方法constructor()時是直接引用new.target.prototype來作為原型的,這樣也就可以在new運算時引用到MyClass子類的原型。例如:

// 方法5class MyClassEx extends MyClass { get description() { return 'class MyClassEx'; }}atom = new MyClassEx;console.log(atom.description); // class MyClassEx

使用一般函數(shù)并直接返回原子

下面的代碼是兼容構(gòu)造器、原型繼承和函數(shù)調(diào)用等方式的。

// 方法6// (當(dāng)作為函數(shù)調(diào)用時,new.target為undefined值)function MyAtom() { return Object.create(new.target && new.target.prototype || null);}// 示例1atom = new MyAtom;// 示例2atom = MyAtom();

使用類來創(chuàng)建原子的一個特例

在上述方法4中,由于聲明了extends null,因此類MyClass必須擁有一個自己的構(gòu)造方法。但事實上在JavaScript中,

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 大田县| 马边| 酒泉市| 呼图壁县| 新乡市| 乐业县| 房产| 蒙自县| 松溪县| 大宁县| 抚顺市| 平原县| 郴州市| 佛学| 肃南| 安国市| 新竹县| 扶余县| 莒南县| 镇平县| 集安市| 黔西县| 冷水江市| 马鞍山市| 文成县| 南江县| 永新县| 临潭县| 宜都市| 措美县| 伊吾县| 黄石市| 松溪县| 黄浦区| 屯门区| 酒泉市| 万载县| 寿光市| 和平区| 喀喇| 邢台县|