摘要:它將返回目標對象。封閉對象方法判斷一個對象是否被密封。為源對象為修改的屬性名或設置,同上方法返回一個給定對象自身可枚舉屬性的鍵值對數組方法返回指定對象上一個自有屬性對應的屬性描述符方法判斷兩個值是否是相同的值。
對象作為引用類型,工作中免不了復制對象,下面來看看克隆的方法
const obj1 = { a: 1, b: 2, title: { name: "張三" } }; const obj2 = Object.assign({}, obj1); console.log(obj2); //{ a: 1, b: 2 ,title:{name:"張三"}} obj1.title.name = "李四"; //修改obj1的值,再來打印看下obj2的值 console.log(obj2) //{ a: 1, b: 2,title:{name:"李四"} } console.log(obj1) //{ a: 1, b: 2,title:{name:"李四"} }
var cloneObj = JSON.parse(JSON.stringify(obj));
let freeze1 = { a: "1" }; let freeze2 = Object.freeze(freeze1); freeze2.a = 2; console.log(freeze2) //1
console.log(Object.isFrozen(freeze2)) //true
let seal = {}; Object.seal(seal); //封閉對象
console.log(Object.isSealed({}), "------"); //false console.log(Object.isSealed(seal), "------"); //true
for ...in Object.keys() JSON.stringify()
先看一個例子,創建一個對象
function Person() { this.name = "KEY" } Person.prototype = { constructr: Person, jos: "student" }; var key = new Person(); Object.defineProperty(key, "sex", { value: "female" }) console.log(key.sex, "------") //female ------ 直接訪問可以獲取的key.sex for (var pro in key) { //遍歷無法打印不可枚舉對象 console.log("pro:" + pro + ";" + key[pro]) } pro:name;KEY pro:constructr;function Person(){ this.name="KEY" } pro:jos;student
console.log(Number.propertyIsEnumerable("parseint")) //false
Object.defineProperties(obj, props) *obj 為源對象 *props是一個對象,里面有configurable,enumerable,value,writable,get,set *configurable 屬性描述符的類型可以被改變并且該屬性可以從對應對象中刪除。默認false *enumerable 是否為枚舉屬性 默認為false *value 任意值,默認undefined *writable 可以通過賦值改變 默認false *get 返回value值,默認undefinde *set 設置value值,默認undefine var defind = {}; Object.defineProperties(defind, { "v1": { value: "12" } }); console.log(defind.v1) //12
Object.defineProperty(obj,name, prop) *obj 為源對象 name為修改的屬性名或設置,prop同上 Object.defineProperty(defind, "key", { enumerable: false, configurable: false, writable: false, value: "static" });
console.log(Object.getOwnPropertyDescriptor(freeze1, "a")); { value: "1", writable: false, enumerable: true, configurable: false }
console.log(Object.is({}, {})); //false console.log(Object.is([], {})); //false console.log(Object.is([], [])); //false
var o = { prop: "exists" }; console.log(o.hasOwnProperty("prop")); // 返回 true console.log(o.hasOwnProperty("hasOwnProperty")); // 返回 false
每天進步一點,希望大家喜歡,也希望喜歡的朋友點個贊,后續繼續更新...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/93595.html
摘要:下面定義一個構造函數不過這樣寫這個函數,每個對象都會包括一部分,太浪費內存。原型鏈與繼承在學習原型鏈之前我們一定要區分清楚是構造函數的屬性,而是對象的屬性。但對象形式不等于基本類型。用來判斷對象是否某個構造函數的實例。 js是一個基于對象的語言,所以本文研究一下js對象和類實現的過程和原理。 對象的屬性及屬性特性 下面是一個對象的各個部分: var person = { name:...
摘要:嘗試刪除一個密封對象的屬性或者將某個密封對象的屬性從數據屬性轉換成訪問器屬性,結果會靜默失敗或拋出異常嚴格模式。 擴展特性 Object.isExtensible 方法 Object.preventExtensions 方法 密封特性 Object.isSealed 方法 Object.seal 方法 凍結特性 Object.isFrozen 方法 Object...
摘要:為什么要使用克隆克隆對象可能包括已經修改過的屬性,出來的對象屬性都還是初始化的值。 為什么要使用克隆? 克隆對象可能包括已經修改過的屬性,new出來的對象屬性都還是初始化的值。 若直接利用指針指向原有對象,改變原對象的屬性值時,指針所指對象的值也會改變 clone復制的對象與原對象是相互獨立存在 如何實現對象克隆? 克隆主要分為淺克隆和深克隆 步驟 被復制類需實現Cl...
摘要:對象詳解對象深度剖析,深度理解對象這算是醞釀很久的一篇文章了。用空構造函數設置類名每個對象都共享相同屬性每個對象共享一個方法版本,省內存。 js對象詳解(JavaScript對象深度剖析,深度理解js對象) 這算是醞釀很久的一篇文章了。 JavaScript作為一個基于對象(沒有類的概念)的語言,從入門到精通到放棄一直會被對象這個問題圍繞。 平時發的文章基本都是開發中遇到的問題和對...
摘要:引用類型之所以會出現深淺拷貝的問題,實質上是由于對基本類型和引用類型的處理不同。另外方法可以視為數組對象的淺拷貝。上面描述過的復雜問題依然存在,可以說是最簡陋但是日常工作夠用的深拷貝方式。 一直想梳理下工作中經常會用到的深拷貝的內容,然而遍覽了許多的文章,卻發現對深拷貝并沒有一個通用的完美實現方式。因為對深拷貝的定義不同,實現時的edge case過多,在深拷貝的時候會出現循環引用等問...
閱讀 819·2021-11-22 15:25
閱讀 1419·2021-09-08 09:45
閱讀 1704·2021-09-02 09:46
閱讀 1308·2019-08-30 15:56
閱讀 1540·2019-08-29 15:14
閱讀 1166·2019-08-29 13:06
閱讀 2019·2019-08-29 12:34
閱讀 1408·2019-08-26 12:14