es6之Object擴展及內部屬性的總結

来源:https://www.cnblogs.com/fenglinwanyue/archive/2018/09/06/9598323.html
-Advertisement-
Play Games

對象擴展: 1、Object.is(A,B) :比較兩個值是否相等,取代 運算;只要值相等代表相等;其中NAN和NAN相等;+0和-0不相等; 2、Object.assign(target,source1,source2.......) :合併源對象的所有可枚舉屬性到目標對象;同名屬性後覆蓋前;ju ...


對象擴展:

1、Object.is(A,B) :比較兩個值是否相等,取代===運算;只要值相等代表相等;其中NAN和NAN相等;+0和-0不相等;

2、Object.assign(target,source1,source2.......) :合併源對象的所有可枚舉屬性到目標對象;同名屬性後覆蓋前;just one obj,return this obj;【僅一個參數】將源目標非對象先轉化為對象,無法轉化的將會報錯undefined;null;【多個參數】不在首參數為數值、字元串、布爾值、undefined、null均不會複製;只拷貝源對象的自身屬性,不拷貝繼承屬性;【淺拷貝】

註意⚠️:Object.assign處理數組,相同下標的元素後者覆蓋前者

    對於取值函數的合併,會先求取值之後合併;取值函數get foo(){return 1} -> foo:1

    es6規定:class的原型均為不可枚舉

使用:

/** * 為對象添加屬性 */ class Untils { constructor(x, y) { Object.assign(this, x, y) // 通過Object.assign方法將x,y添加到Untils的實例上 } } /** * 為對象添加方法 */ Object.assign(someClass.prototype, { method(x, y) {}, anotherMethod() {} }) /** * 克隆對象 */ function clone(origin) { return Object.assign({}, origin) } /** * 合併多個對象 */ (target, ...source) => Object.assign(target, ...source) /** * 為屬性指定預設值 */ const defaultOpts = { level: 3, color: red } function addOpts (opt) { return Object.assign({},defaultOpts,opt) // defaultOpts引用類型有問題 } 3、Object.keys 遍歷對象可枚舉的屬性的鍵名,返回數組;不含繼承的屬性、不含symbol屬性【es5】取代for...in 4、Object.values 遍歷對象可枚舉的屬性的鍵值,返回數組;不含繼承的屬性、不含symbol屬性 配合for...of使用 5、Object.entries 遍歷對象可枚舉的屬性的鍵值對,返回數組;不含繼承的屬性、含symbol屬性的將忽略當前鍵值對 配合for...of使用 6、Object.getOwnPropertyDescriptor方法是為瞭解決Object.assign對get set函數的拷貝值問題,set get無return的情況下,Object.assign拷貝的值為undefined 7、Object.defineProperties(obj,objProperty,DescriptorObj) 修改對象屬性預設特性【數據屬性】的特定方法【es5】obj屬性所在對象,屬性名稱,屬性的描述符對象 8、Object.setPrototypeOf 取代_proto_對原型的處理【寫】
9、Object.getPrototypeOf 取代_proto_對原型的處理【讀】
10、Object.create 取代_proto_對原型的處理【生成操作】方法創建一個新對象,使用現有的對象來提供新創建的對象的__proto__Object.create({},obj)第二個obj是添加到新創建對象上面的可枚舉屬性,同時可配置描述符對象 詳細可點擊此鏈接查看https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/create 11、super指向當前對象的prototype對象,只能用於對象的方法之中而不能用於對象方法的賦值操作【待總結繼承時詳述】 解構賦值:要求等號右邊為對象,不能為undefined/null,解構賦值的參數需作為最後一位參數;對複合類型僅作為引用; 擴展運算符: ... 相當於Object.assign 取出參數對象的所有可遍歷屬性拷貝到當前對象之中;

對象的內部屬性:這些特性是為了實現javascript引擎

Descriptor:描述對象【每個對象都有】通過Object.getOwnPropertyDescriptor(obj,'someProperty') 訪問

數據屬性:如下【還有一種是防問器屬性】

enumerable: false 不可枚舉

configurable: true 屬性修改,可delete,修改為false之後無法再改變此描述符,再次修改 static mode會報錯

writable:true 修改屬性值
value 讀取/寫入新值 預設undefined

[[PrimitiveValue]] :原始值

_proto_ 用來讀取及設置當前屬性的prototype對象【IE11】在無法使用的內部屬性時,es6提供了可供使用的對prototype的操作方法以上6、7、8


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • React Native開發中自動打包腳本 在日常的RN開發中,我們避免不了需要將我們編寫的代碼編譯成安裝包,然後生成二維碼,供需要測試的人員掃描下載。但是對於非原生的開發人員來說,可能不知如何使用Xcode或者Android studio來導出ipa、apk安裝包,為瞭解決非原生開發的同學們打安裝 ...
  • JavaScript語句 JavaScript語句向瀏覽器發出命令,語句的作用是告訴瀏覽器該乾什麼。 JavaScript分號 ; 分號用於分隔JavaScript語句。 通常我們在每條可執行的語句尾添加分號。 另一個作用是在一行中編寫多條語句。 a = 5; b = 4; c = a + b; a ...
  • 好端端的”斐波那契“是怎麼變成這樣的,因吹斯聽,我們來回放一下。 ...
  • 前言 想必各位在寫wap端時都遇到過這樣的場景吧 自定義分享標題、圖片、描述 接下來小編給大家講解下分享相關操作 預期效果 原始的分享效果: 使用微信JS-SDK的分享效果: 可以看出縮略圖,標題,摘要樣式良好,給用戶的體驗很好。 準備工作 微信官方開發者文檔地址:https://mp.weixin ...
  • 背景:由於最近在做項目之餘想做一些其他的事,所以東找找西找找的,最後決定寫一個封裝一些常用原型方法的NPM包,但不僅限於此。話不多說,說一下實踐過程。 一、註冊NPM及如何上傳NPM包參考連接:https://blog.csdn.net/Her_smile/article/details/80519 ...
  • 區分開發模式和生產模式: npm run start——開發模式,啟用devServer,文件的改動實時更新、刷新 npm run build——生產模式,打包文件到dist文件夾 ...
  • 阿裡的模擬筆試題,當時時間有限沒寫出來,其實是因為自己對原生dom操作不熟悉,這裡補一下。 題目的大意是有一個表格,如代碼所示 大概長這樣吧,註意有表頭,然後讓你寫一個函數對錶中的記錄,比如按idx升序排序 思路:就將表中的數據全都取出來,排序之後重新建表。 代碼 要記住的點就是,querySele ...
  • 一、css垂直居中 1.line-height(適用於單行文本居中) eg: html:<p class="wordp">123</p>- css: .wordp{width:100px;line-height:50px;background:yellow;color:#fff} 2.:befor+ ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...