精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

為什么 JS 中的對象字面量很酷

開發(fā) 前端
JS 中很多令人沮喪的問題都是逐步解決的。本文演示了 ES 6 如何解決上述問題,并使用額外的功能改進(jìn)對象字面量。

在 ES6 之前,JS 中的對象字面量(也稱為對象初始化器)是非常基礎(chǔ)的。可以定義兩種類型的屬性:

  • 鍵值對 {name1: value1}
  • 獲取器 { get name(){..} } 和 設(shè)置器 { set name(val){..}} 的計算屬性值

為什么 JS 中的對象字面量很酷

JS 是一種基于原型的語言,因此一切都是對象。在對象創(chuàng)建,配置和訪問原型時,必須提供一種易于構(gòu)造的語言。

定義一個對象并設(shè)置它的原型是一個常見的任務(wù)。最好的方式是直接在對象字面量使用一條語句來設(shè)置原型。

不幸的是,字面量的局限性不允許用一個簡單的解決方案來實現(xiàn)這一點。必須結(jié)合使用object.create() 和對象字面量來設(shè)置原型。

為什么 JS 中的對象字面量很酷

我認(rèn)為這種解決方案不夠靈活。JS 是基于原型的,為什么要用原型創(chuàng)建對象那么麻煩?

幸運的是,JS 也在慢慢完善。JS 中很多令人沮喪的問題都是逐步解決的。

本文演示了 ES 6 如何解決上述問題,并使用額外的功能改進(jìn)對象字面量。

  • 在對象構(gòu)造上設(shè)置原型
  • 方法的聲明
  • super 調(diào)用
  • 計算屬性名 

JS

1. 在對象構(gòu)造上設(shè)置原型

如你所知,訪問現(xiàn)有對象原型的一種方法是使用 getter 屬性 __proto__:

  1. var myObject = { 
  2.   name: 'Hello World!', 
  3. }; 
  4. myObject.__proto__; // => {} 
  5. myObject.__proto__.isPrototypeOf(myObject); // => true 

myObject.__ proto__ 返回 myObject 的原型對象。

請注意,不建議將 object.__ proto__ 用作 getter/setter。替代方法應(yīng)考慮使用Object.getPrototypeOf() 和 Object.setPrototypeOf()。

ES6允許使用__proto__作為屬性名,并在 {__proto__:protoObject}中設(shè)置原型。

接著,咱們使用 __proto__ 屬性進(jìn)行對象初始化,并優(yōu)化上面的代碼:

  1. var myProto = { 
  2.   propertyExists: function(name) { 
  3.     return name in this; 
  4.   }, 
  5. }; 
  6. var myNumbers = { 
  7.   __proto__: myProto, 
  8.   array: [1, 6, 7], 
  9. }; 
  10. myNumbers.propertyExists('array'); // => true 
  11. myNumbers.propertyExists('collection'); // => false 

myNumbers 對象是使用特殊屬性名 proto 與創(chuàng)建原型 myProto,這次咱們使用一條語句就創(chuàng)建,沒有像上面還需要 object.create() 這樣的附加函數(shù)。

如你所看,使用 __proto__ 進(jìn)行編碼很簡單,我一直喜歡簡單明了的解決方案。

說點脫離主題。我覺得奇怪的是,簡單靈活的解決方案需要大量的工作和設(shè)計。如果解決方案很簡單,你可能會認(rèn)為設(shè)計起來很容易。但是反之亦然:

  • 要使它簡單明了是很復(fù)雜的
  • 把它變得復(fù)雜和難以理解是很容易的

如果某些東西看起來太復(fù)雜或難以使用,則可能還需要進(jìn)一步的完善。

你對簡單性有何看法?(請在下面隨意寫評論)

2. proto 用法的特殊情況

即使__proto__看起來很簡單,您也應(yīng)該注意一些特殊情況。

為什么 JS 中的對象字面量很酷

在對象字面量中只能使用__proto__一次,否則 JS 會報錯:

  1. var object = { 
  2.   __proto__: { 
  3.     toString: function() { 
  4.       return '[object Numbers]' 
  5.     } 
  6.   }, 
  7.   numbers: [1, 5, 89], 
  8.   __proto__: { 
  9.     toString: function() { 
  10.       return '[object ArrayOfNumbers]' 
  11.     } 
  12.   } 
  13. }; 

上面示例中的對象字面量中使用兩次__proto__屬性,這是不允許的。在這種情況下,將在會拋出錯誤:SyntaxError: Duplicate __proto__ fields are not allowed in object literals 。

JS 約束只能用一個對象或 null 作為 __proto__ 屬性的值。任何使用原始類型(字符串,數(shù)字,布爾值)或 undefined 類型都將被忽略,并且不會更改對象的原型。

  1. var objUndefined = { 
  2.   __proto__: undefined, 
  3. }; 
  4. Object.getPrototypeOf(objUndefined); // => {} 
  5. var objNumber = { 
  6.   __proto__: 15, 
  7. }; 
  8. Object.getPrototypeOf(objNumber); // => {} 

對象字面量使用 undefined 和 數(shù)字 15 來設(shè)置 __proto__ 值。因為僅允許將對象或 null 用作原型,所以__proto__值將被忽略,但 objUndefined 和objNumber 仍具有其默認(rèn)原型:純 JS 對象 {}, 。

當(dāng)然,嘗試使用基本類型來設(shè)置對象的原型也會很奇怪。

當(dāng)對象字面具有計算結(jié)果為'proto'的字符串時 {['__proto__']:protoObj },也要小心。以這種方式創(chuàng)建的屬性不會更改對象的原型,而只是使用鍵 '__proto__' 創(chuàng)建一個擁有的屬性

3. 簡寫方法定義

可以使用較短的語法在對象常量中聲明方法,以省略 function 關(guān)鍵字和 : 冒號的方式。這被稱為簡寫方法定義。

接著,咱們使用簡寫的方法來定義一些方法:

  1. var collection = { 
  2.   items: [], 
  3.   add(item) { 
  4.     this.items.push(item); 
  5.   }, 
  6.   get(index) { 
  7.     return this.items[index]; 
  8.   }, 
  9. }; 
  10. collection.add(15); 
  11. collection.add(3); 
  12. collection.get(0); // => 15 

一個很好的好處是,以這種方式聲明的方法被命名為函數(shù),這對于調(diào)試目的很有用。從上面示例中執(zhí)行 collection.add.name 會返回函數(shù)名稱 “add”。

(1) super 的使用

JS 一個有趣的改進(jìn)是使用 super 關(guān)鍵字作為從原型鏈訪問繼承的屬性的能力。看下面的例子:

為什么 JS 中的對象字面量很酷

calc 是 numbers 對象的原型。在 numbers 的 sumElements方法中,可以使用super關(guān)鍵字從原型訪問方法:super.sumElements()

最終,super 是從對象原型鏈訪問繼承的屬性的快捷方式。

在前面的示例中,可以嘗試直接執(zhí)行 calc.sumElements() 來調(diào)用原型,會報錯。然而,super.sumElements() 可以正確調(diào)用,因為它訪問對象的原型鏈。并確保原型中的sumElements() 方法使用 this.numbers 正確訪問數(shù)組。

super 存在清楚地表明繼承的屬性將被使用。

(2) super 使用限制

super 只能在對象字面量的簡寫方法定義內(nèi)使用。

如果試圖從普通方法聲明{ name: function(){} } 訪問它,JS 將拋出一個錯誤:

為什么 JS 中的對象字面量很酷

方法 sumElements 被定義為一個屬性: sumElements: function(){…}。因為super 只能在簡寫方法中使用,所以在這種情況下調(diào)用它會拋出 SyntaxError: 'super' keyword unexpected here。

此限制在很大程度上不影響對象字面量的聲明方式。由于語法較短,因此通常最好使用簡寫方法定義。

4. 計算屬性名

在 ES6 之前,對象初始化使用的是字面量的形式,通常是靜態(tài)字符串。要創(chuàng)建具有計算名稱的屬性,就必須使用屬性訪問器。

  1. function prefix(prefStr, name) { 
  2.   return prefStr + '_' + name; 
  3. var object = {}; 
  4. object[prefix('number', 'pi')] = 3.14; 
  5. object[prefix('bool', 'false')] = false; 
  6. object; // => { number_pi: 3.14, bool_false: false } 

當(dāng)然,這種定義屬性的方式是令人愉快的。

接著使用簡寫方式來改完上面的例子:

  1. function prefix(prefStr, name) { 
  2.   return prefStr + '_' + name; 
  3. var object = { 
  4.   [prefix('number', 'pi')]: 3.14, 
  5.   [prefix('bool', 'false')]: false, 
  6. }; 
  7. object; // => { number_pi: 3.14, bool_false: false } 

[prefix('number','pi')]通過計算 prefix('number', 'pi') 表達(dá)式(即'number_pi')來設(shè)置屬性名稱。

相應(yīng)地,[prefix('bool', 'false')] 將第二個屬性名稱設(shè)置為'bool_false'。

(1) symbol 作為屬性名稱

symbol 也可以用作計算的屬性名稱。只要確保將它們包括在方括號中即可:{[Symbol('name')]:'Prop value'}

例如,用特殊屬性 Symbol.iterator 并迭代對象自身的屬性名稱。如下示例所示:

為什么 JS 中的對象字面量很酷

[Symbol.iterator]: function *() { } 定義一個屬性,該屬性用于迭代對象的自有屬性。展開運算符 [... object] 使用迭代器并返回自有的屬性的列表。

剩余和展開屬性

剩余屬性允許從對象中收集在分配銷毀后剩下的屬性。

下面的示例在解構(gòu)對象之后收集剩余的屬性:

  1. var object = { 
  2.   propA: 1, 
  3.   propB: 2, 
  4.   propC: 3, 
  5. }; 
  6. let { propA, ...restObject } = object; 
  7. propA; // => 1 
  8. restObject; // => { propB: 2, propC: 3 } 

展開屬性允許將源對象的自有屬性復(fù)制到對象文字面量中。在此示例中,對象字面量從源對象收集到對象的其他屬性:

  1. var source = { 
  2.   propB: 2, 
  3.   propC: 3, 
  4. }; 
  5. var object = { 
  6.   propA: 1, 
  7.   ...source, 
  8. }; 
  9. object; // => { propA: 1, propB: 2, propC: 3 } 

6. 總結(jié)

在 ES6 中,即使是作為對象字面量的相對較小的結(jié)構(gòu)也得到了相當(dāng)大的改進(jìn)。

可以使用__proto__ 屬性名稱直接從初始化器設(shè)置對象的原型。這比使用Object.create() 更容易。

請注意,__proto__ 是 ES6 標(biāo)準(zhǔn)附件B的一部分,不鼓勵使用。該附件實現(xiàn)對于瀏覽器是必需的,但對于其他環(huán)境是可選的。NodeJS 4、5和6支持此功能。

現(xiàn)在方法聲明的形式更短,因此不必輸入 function 關(guān)鍵字。在簡化方法中,可以使用super關(guān) 鍵字,該關(guān)鍵字可以輕松訪問對象原型鏈中的繼承屬性。

如果屬性名稱是在運行時計算的,那么現(xiàn)在您可以使用計算的屬性名稱[expression]來初始化對象。

 

責(zé)任編輯:趙寧寧 來源: 今日頭條
相關(guān)推薦

2020-03-31 16:30:09

JS語言ES 6

2021-10-09 07:10:30

Go字面量組合

2018-04-10 13:40:14

Kubernetes容器服務(wù)器

2020-12-18 11:35:22

TypeScript語言Java

2023-09-20 00:02:33

C++14二進(jìn)制字面量

2021-05-28 08:01:00

JS原型概念

2023-11-07 15:11:46

Kafka技巧

2022-06-08 08:01:28

模板字面量類型

2009-07-06 14:42:24

Visual Basi

2020-08-02 22:54:04

Python編程語言開發(fā)

2020-08-03 07:50:56

存儲對象存儲

2022-05-10 11:32:12

加密貨幣比特幣供應(yīng)限制

2022-05-10 14:17:26

加密貨幣供應(yīng)量以太坊

2012-05-02 15:56:20

PHP

2019-09-24 10:17:14

2015-02-11 10:22:25

對象存儲云共享S3存儲

2023-09-19 08:03:01

JavaScriptevery()

2011-04-12 13:53:25

ASP.NET MVCjQuery

2020-11-10 22:59:52

COPR軟件倉庫

2024-08-27 10:54:20

JSON函數(shù)屬性
點贊
收藏

51CTO技術(shù)棧公眾號

国产精品毛片久久久久久久| 香蕉久久夜色精品国产| 91精品国产色综合久久不卡蜜臀| 综合久久国产| 成人乱码一区二区三区| 亚洲精选成人| 影音先锋日韩有码| 激情五月婷婷基地| 久热在线观看视频| 国产精品天干天干在线综合| 亚洲最大av在线| 男女啊啊啊视频| 99久久.com| 亚洲国产精品久久91精品| 免费无码国产v片在线观看| 91在线高清| 粉嫩av亚洲一区二区图片| 日产日韩在线亚洲欧美| 精品国产视频一区二区三区| 精品精品国产毛片在线看| 欧美体内she精视频| 日本人体一区二区| 日本在线观看视频| 26uuu久久综合| 91视频婷婷| 中文资源在线播放| 黄色精品网站| xxav国产精品美女主播| www.男人天堂| 国产精品日本一区二区三区在线 | 成人做爰视频www| 一级特黄大欧美久久久| 亚洲不卡1区| 成人免费公开视频| 国产美女精品一区二区三区| 国产精品v日韩精品| 天天插天天操天天干| 欧美一区二区| www日韩欧美| 免费网站在线高清观看| 欧美有码在线| 亚洲成人精品久久| 久久综合桃花网| 欧美一级网址| 欧洲生活片亚洲生活在线观看| 亚洲国产精品成人天堂| 午夜激情在线| 亚洲激情自拍视频| 美国av在线播放| 自拍视频在线播放| 国产欧美日韩卡一| 欧美中日韩一区二区三区| 天天操天天射天天舔| 懂色av一区二区三区蜜臀| 亚洲在线www| 国产99久一区二区三区a片| 美国十次了思思久久精品导航| 国产成人亚洲综合91精品| 黄色大片网站在线观看| 亚洲日产国产精品| 91国内免费在线视频| 日韩欧美一区二区一幕| aa国产精品| 97久久精品视频| 日韩 欧美 中文| 亚洲一区日韩在线| 日本一区二区三区四区视频| 午夜精品一区二| 日韩国产精品91| 国产精品爽黄69天堂a| 亚洲一级av毛片| 久久99国产精品麻豆| 成人伊人精品色xxxx视频| 国产成人精品免费看视频| 国产精品一区二区久久不卡| 91精品黄色| 开心激情综合网| 99re这里都是精品| 视频一区不卡| 女女色综合影院| 一区二区三区在线观看网站| 成人性生活视频免费看| 成人动漫一区| 欧美日韩视频在线观看一区二区三区| 日韩高清第一页| 久久99精品久久久野外观看| 亚洲第一网中文字幕| 超碰97人人干| 97精品国产| 欧美国产视频日韩| 91玉足脚交嫩脚丫在线播放| 日韩avvvv在线播放| 91香蕉亚洲精品| 熟妇高潮一区二区高潮| 国产婷婷精品av在线| mm131午夜| 狠狠躁少妇一区二区三区| 欧美在线小视频| 性一交一黄一片| 四虎5151久久欧美毛片| 日韩一区二区在线视频| 国产黄色片视频| 日韩电影网1区2区| 超碰97在线人人| 国产有码在线| 亚洲国产一区在线观看| 亚洲精品久久久中文字幕| 91精品尤物| 正在播放亚洲1区| 国产精品111| 精品伊人久久久久7777人| 国产在线播放一区二区| 麻豆影院在线| 色综合天天天天做夜夜夜夜做| 天堂中文av在线| 亚洲男人都懂第一日本| 欧美高清第一页| 国产成人a v| 99视频国产精品| 少妇高潮大叫好爽喷水| 日韩在线免费| 亚洲国产精彩中文乱码av| 国产精品国产三级国产传播| 久久久久99| 久久av一区二区三区漫画| а√天堂8资源在线官网| 91搞黄在线观看| 三级电影在线看| 狠狠干综合网| 国产在线视频不卡| 国产一级网站视频在线| 午夜av区久久| 天天躁日日躁狠狠躁av| 久久精品青草| 国产日韩欧美自拍| yourporn在线观看中文站| 欧美日韩一二三四五区| 一级黄色电影片| 综合激情网站| 91亚洲人电影| 黄色片免费在线观看| 欧美色精品天天在线观看视频| 国产伦精品一区二区三区妓女 | 中文字幕人妻互换av久久| 91在线观看下载| 免费看黄在线看| av成人综合| 久久久久久国产精品美女| 精品人妻无码一区二区三区蜜桃一| 中文字幕五月欧美| 午夜免费看视频| 色乱码一区二区三区网站| 国产精品久久网| 色三级在线观看| 欧美日韩免费高清一区色橹橹| 影音先锋制服丝袜| 日韩高清欧美激情| 亚洲国产精品综合| 中文成人在线| 欧美成人在线网站| 亚洲AV无码国产精品午夜字幕 | 91黄色在线看| 风间由美一区二区av101| 久久久久亚洲精品国产| 日本毛片在线观看| 岛国av一区二区| 亚洲精品国产熟女久久久| 日韩福利视频导航| 午夜精品亚洲一区二区三区嫩草| 成人日韩av| 久久亚洲私人国产精品va| 国产av一区二区三区| 一级特黄大欧美久久久| 久久人人妻人人人人妻性色av| 久久99伊人| 视频一区二区综合| 国产精品1区| 久久免费精品视频| 国内三级在线观看| 67194成人在线观看| 国产一级中文字幕| 久久精品视频在线看| 在线观看国产一级片| 欧美久久影院| 欧美三日本三级少妇三99| 国产亚洲精品精品国产亚洲综合| 久热爱精品视频线路一| 亚洲国产精品18久久久久久| 精品国产老师黑色丝袜高跟鞋| 国产视频三区四区| 国产精品乡下勾搭老头1| 日韩av一二三四区| 婷婷综合久久| 久久精品国产一区二区三区日韩| 成人亚洲网站| 韩国19禁主播vip福利视频| 岛国大片在线观看| 日韩欧美一级在线播放| 无码一区二区三区| 亚洲一区免费观看| 三年中国中文观看免费播放| 日韩一级视频在线观看| 超碰97在线免费观看| 欧美午夜寂寞影院| 国产大片中文字幕| 国产精品免费av| 免费观看一级一片| 国产精品资源网站| 国产免费视频传媒| 狠狠爱www人成狠狠爱综合网| 亚洲 国产 欧美一区| 欧美一性一交| a级国产乱理论片在线观看99| 成人精品电影在线| 国a精品视频大全| 精品国产白色丝袜高跟鞋| 亚洲精选中文字幕| www.爱爱.com| 欧美剧在线免费观看网站 | 黄色在线视频观看网站| 欧美一级久久久| 中文字幕av免费观看| 日韩欧美国产一区二区| 久久99久久98精品免观看软件| 国产精品欧美一区二区三区| 91精品人妻一区二区| 岛国一区二区三区| 免费不卡av网站| 久久国内精品自在自线400部| 夫妻免费无码v看片| 国产综合自拍| 国产精品三级一区二区| 99久久综合| 亚洲欧洲一区二区福利| 国产亚洲精品美女久久久久久久久久| 国产视频一区二区不卡| 中文无码日韩欧| 亚洲综合av影视| 91成人小视频| 成人美女免费网站视频| 欧美高清免费| 国产欧美日韩精品丝袜高跟鞋| 国精产品一区二区三区有限公司 | 久久久久毛片| 国产精品久久久久久久久久久新郎| 625成人欧美午夜电影| 国内精品一区二区三区四区| 蜜臀av在线| 久久久久久亚洲精品| 黄色在线观看视频网站| 久久99久久亚洲国产| 久久香蕉av| 高清欧美一区二区三区| 大桥未久在线视频| 清纯唯美日韩制服另类| 久久精品女人天堂av免费观看| 欧美怡红院视频一区二区三区 | 色天天综合色天天久久| 69成人免费视频| 在线观看欧美黄色| 国产又粗又大又爽| 日韩视频一区在线观看| 污视频在线免费观看| 亚洲欧美日韩成人| 国产福利在线观看| 久久精品中文字幕电影| 亚洲色图美国十次| 555www成人网| 999国产精品亚洲77777| 成人欧美一区二区三区黑人| 51精品国产| 麻豆久久久9性大片| av一区二区在线播放| 91看片淫黄大片91| 国产日韩欧美在线播放不卡| 中文字幕欧美人妻精品一区| 久久国产免费看| 精品视频站长推荐| 国产日韩精品一区二区三区 | 涩涩视频网站在线观看| 国产91精品久久久| 黑人一区二区三区| 91在线中文字幕| 国产成人免费av一区二区午夜 | 久久不射热爱视频精品| 国内在线免费视频| 欧美在线日韩在线| 福利一区在线| 国产精品一 二 三| 免费电影一区二区三区| 中文字幕成人一区| 99国产精品私拍| 天天爽人人爽夜夜爽| 蜜臀a∨国产成人精品| 在线xxxxx| 久久久精品2019中文字幕之3| 成人免费黄色小视频| 亚洲成人精品一区二区| 亚洲天堂男人av| 日韩精品一区二区三区视频播放| 无码精品人妻一区二区三区影院| 国产亚洲精品va在线观看| 免费毛片在线看片免费丝瓜视频 | 国产精品一国产精品最新章节| 4438全国亚洲精品观看视频| 欧美成人在线免费观看| 欧美极品另类| 色综合伊人色综合网站| aa级大片免费在线观看| 国产精品美女久久久久av超清| 91亚洲无吗| 亚洲国产一区二区三区在线| 国内久久精品| 天天干天天色天天干| 91在线国产观看| 免费看日本黄色片| 亚洲成年人影院| 中文字幕 亚洲视频| 日韩精品中文字幕在线| 岛国成人毛片| 性欧美长视频免费观看不卡| 24小时成人在线视频| 免费一区二区三区| 亚洲精选91| 三级黄色片免费看| 国产欧美日韩不卡免费| 伊人中文字幕在线观看| 欧美大片在线观看一区| av亚洲在线| 国产精品白嫩初高中害羞小美女| 凹凸成人在线| 天天爱天天做天天操| 老牛影视一区二区三区| 亚洲av成人无码一二三在线观看| 成人免费小视频| 国产一级精品视频| 日韩电影免费观看中文字幕| 在线免费观看a视频| 91色在线观看| 日本一区二区免费高清| 中文字幕第21页| 99r精品视频| 日日噜噜噜噜人人爽亚洲精品| 精品少妇一区二区三区视频免付费| xvideos国产在线视频| 国产欧美日韩91| 亚洲第一论坛sis| 任你操这里只有精品| 99国产精品国产精品毛片| 日韩精品在线观看免费| 亚洲国产97在线精品一区| 欧美寡妇性猛交xxx免费| 成人午夜在线视频一区| 午夜视频精品| 欧美午夜精品理论片| 亚洲视频在线一区二区| 91久久精品无码一区二区| 中文字幕成人精品久久不卡| 日本免费在线一区| 亚洲一区二区高清视频| 久久精品国产亚洲高清剧情介绍 | 99热这里只有精品9| 日日狠狠久久偷偷四色综合免费| www成人在线视频| 亚洲精品一区二区三区樱花| 欧美a一区二区| 永久免费看片直接| 91精品久久久久久久99蜜桃 | 日本手机在线视频| 成人av网站大全| 中日韩黄色大片| 日日骚av一区| 精品午夜视频| 人人妻人人添人人爽欧美一区| 99久久久久久| 日韩电影在线观看一区二区| www国产亚洲精品久久网站| 国产欧美日韩电影| 成 年 人 黄 色 大 片大 全| 久久综合色之久久综合| 日本高清www免费视频| 中文字幕日韩精品有码视频| 亚洲欧美在线综合| 亚洲 欧美 日韩 国产综合 在线| 久久亚洲免费视频| 国产成人无码精品亚洲| 欲色天天网综合久久| 天堂久久一区| 国产夫妻自拍一区| www一区二区| 99久久精品无免国产免费| 欧美国产精品人人做人人爱| 日韩精品免费一区二区夜夜嗨| 久久国产这里只有精品| 亚洲精品国产a久久久久久| 免费动漫网站在线观看| 国产日本欧美视频| 欧美日韩亚洲一区| 18精品爽国产三级网站| 欧美xxxxx牲另类人与|