摘要:類型描述類型對象是所有其他類型對象的父級使用創建對象表示使用構造函數方式創建一個空對象顯示可以根據一個給定值創建一個對應類型的對象創建一個類型的對象顯示啊哈哈創建一個類型的對象顯示啊哈哈屬性描述符表示對象的屬性或方法的內部數據結構用于描述對
Object類型 描述
object類型對象是所有其他類型對象的父級
使用Object創建對象/* 表示使用構造函數方式創建一個空對象 */ var obj1 = new Object(); console.log( obj1 );// 顯示 {} /* Object可以根據一個給定值創建一個對應類型的對象 */ var obj2 = new Object( 100 );// 創建一個number類型的對象 console.log( obj2 );// 顯示 [Number: 100] var obj3 = new Object( "啊哈哈" );// 創建一個string類型的對象 console.log( obj3 );// 顯示 [String: "啊哈哈"]屬性描述符
表示對象的屬性或方法的內部數據結構
用于描述對象的值,或控制值的行為
比如: 是否可修改 是否可刪除 是否可枚舉
屬性描述符的分類數據描述符
存取描述符
獲取屬性描述符Object.getOwnPropertyDescriptor()方法
通過該方法可以獲取到指定屬性或方法的屬性描述符
該方法接收兩個參數
第一個 - 需要查找屬性的目標對象
第二個 - 目標對象中需要查找的屬性名稱( string類型 )
該方法會將查找的結果,以對象的方式返回
var obj = { ahh : "啊哈哈" } var ahh = Object.getOwnPropertyDescriptor( obj, "ahh" ); console.log( ahh ); /* 顯示 { value: "啊哈哈", - 表示 屬性或方法對應的值 writable: true, - 表示 是否可修改,值為boolean類型,true表示可以,false表示不可以,默認值為 false enumerable: true, - 表示 是否可枚舉,值為boolean類型,true表示可以,false表示不可以,默認值為 false configurable: true - 表示 是否可刪除,值為boolean類型,true表示可以,false表示不可以,默認值為 false } */屬性描述符的value屬性
可以對指定對象添加新屬性或方法
可以對指定對象中已有的屬性或方法進行修改
Object.defineProperty()方法
該方法接收三個參數
第一個 - 表示指定的對象
第二個 - 表示指定對象中的屬性名稱,字符串格式
修改就填已存在的
新增就直接寫新名
第三個 - 表示屬性描述符,必須是對象格式 { }
/* 定義一個對象 */ var obj = { ahh : "啊哈哈" } /* 修改屬性 */ console.log( obj.ahh );// 顯示 啊哈哈 /* 對已有屬性進行修改 */ Object.defineProperty( obj, "ahh", { value : "哈哈啊" } ); /* 顯示修改后的屬性 */ console.log( obj.ahh );// 顯示 哈哈啊 /* 添加屬性 */ console.log( obj );// 顯示 { ahh: "哈哈啊" } /* 添加新屬性 */ Object.defineProperty( obj, "ooo", { value : "哦哦哦", /* 設置是否可枚舉 * 用于打印對象時可以正常顯示新增的屬性 * 不設置可枚舉時將無法顯示新增屬性,只顯示原有屬性 * 顯示 { ahh: "哈哈啊" } */ enumerable : true } ); /* 顯示新增屬性 */ console.log( obj );// 顯示 { ahh: "哈哈啊", ooo: "哦哦哦" } /* 調用新屬性 */ console.log( obj.ooo );// 顯示 哦哦哦 /* 注意: * 通過Object.defineProperty()方法新增的屬性 * 該屬性 - 不可修改 不可刪除 不可枚舉 * 通過 對象名.屬性名 = 屬性值 的方法新增的屬性 * 該屬性 - 可以修改 可以刪除 可以枚舉 */屬性描述符的writable屬性
表示指定屬性或方法是否可修改
該屬性值為boolean值
true - 表示可修改
false - 表示不可修改
Object.defineProperty()方法
該方法接收三個參數
第一個 - 表示指定的對象
第二個 - 表示指定對象中的屬性名稱,字符串格式
第三個 - 表示屬性描述符,必須是對象格式 { }
/* 定義一個對象 */ var obj = { ahh : "啊哈哈" } /* 修改已有屬性 */ Object.defineProperty( obj, "ahh", { value : "哈哈啊", writable : false // 不可修改 } ); console.log( obj.ahh );// 顯示 哈哈啊 /* 設置writable屬性后在修改屬性 - 不可修改 */ obj.ahh = "啊啊啊"; console.log( obj.ahh );// 顯示 哈哈啊 /* 設置writable屬性后在修改屬性 - 可修改 */ Object.defineProperty( obj, "ahh", { writable : true // 可修改 } ); obj.ahh = "啊啊啊"; console.log( obj.ahh );// 顯示 啊啊啊屬性描述符的configurable屬性
表示指定屬性或方法是否可枚舉
該屬性值為boolean值
true - 表示可枚舉
false - 表示不可枚舉
Object.defineProperty()方法
該方法接收三個參數
第一個 - 表示指定的對象
第二個 - 表示指定對象中的屬性名稱,字符串格式
第三個 - 表示屬性描述符,必須是對象格式 { }
/* 定義一個對象 */ var obj = { ahh : "啊哈哈" } Object.defineProperty( obj, "ahh", { enumerable : false// 不可枚舉 } ); console.log( obj.ahh );// 顯示 啊哈哈 /* * 只能遍歷對象中可被枚舉的屬性 * for...in語句 * keys()方法 * 可以遍歷對象中可枚舉和不可枚舉的屬性 * getOwnPropertyNames()方法 */ /* for...in語句 */ for ( var i in obj ) { console.log( i ); }// 沒有顯示 /* keys()方法 */ var obj1 = Object.keys( obj ); console.log( obj1 );// 顯示 []空數組 /* getOwnPropertyNames()方法 */ var obj2 = Object.getOwnPropertyNames( obj ); console.log( obj2 );// 顯示 [ "ahh" ]屬性描述符的configurable屬性
表示指定屬性或方法是否可刪除
該屬性值為boolean值
true - 表示可刪除
false - 表示不可刪除
Object.defineProperty()方法
該方法接收三個參數
第一個 - 表示指定的對象
第二個 - 表示指定對象中的屬性名稱,字符串格式
第三個 - 表示屬性描述符,必須是對象格式 { }
/* 定義一個對象 */ var obj = { ahh : "啊哈哈" } /* 修改已有屬性 */ Object.defineProperty(obj, "ahh", { configurable : false // 不可刪除 }); /* 刪除ahh屬性值 */ delete obj.ahh; console.log(obj.ahh);// 顯示 啊哈哈 Object.defineProperty(obj, "ahh", { configurable : true // 可刪除 }); /* 刪除ahh屬性值 */ delete obj.ahh; /* 在調用已刪除的屬性會報錯 */ console.log(obj.ahh);// 顯示 TypeError: Cannot redefine property: ahh屬性描述符的存取器
/* 定義一個對象 */ var obj = { ahh : "ahh" } /* 定義一個全局變量 */ var quanju; Object.defineProperty(obj, "ahh", { // 獲取指定的屬性值 get : function(){// 當獲取或訪問當前屬性時,會調用get方法 /* 類似于數據描述符中的value * get方法在被調用時,不能傳遞任何參數 * get方法在被調用時,允許傳遞this關鍵字 * this - 表示當前的目標對象(不能調用對象的當前目標屬性) */ return quanju;// 由于變量為初始化,調用時可能結果為 undefined }, /* set方法用于定義當前目標屬性的修改作用 * 該方法接收唯一的一個參數 -> 作為當前目標屬性的新的值 * 通過屬性修改操作指定的新的值 -> 作為形參對應的實參 */ set : function(canshu){ /* set方法在被調用時,允許傳遞this關鍵字 * this - 表示當前的目標對象(不能調用對象的當前目標屬性) */ quanju = canshu; } }); console.log(obj.ahh);// 顯示 undefined obj.ahh = "啊啊啊"; console.log(obj.ahh);// 顯示 啊啊啊禁止擴展
表示不能添加新的屬性或方法
Object.preventExtensions()方法表示禁止擴展
Object.isExtensible()方法
表示用于判斷指定對象是否可擴展
true - 表示可擴展
false - 表示不可擴展
/* 定義一個空對象 */ var obj = {}; /* 設置禁止擴展 */ Object.preventExtensions( obj ); /* 添加新屬性 */ obj.ahh = "啊哈哈"; console.log( obj );// 顯示 {}空對象 /* 使用Object.defineProperty()方法進行新增屬性會報錯 * TypeError: Cannot define property:name, object is not extensible. */ Object.defineProperty(obj, "ahh", { value : "啊哈哈" }); console.log( obj );// 顯示 Cannot define property ahh, object is not extensible /* 判斷指定對象是否可擴展 */ var panduan = Object.isExtensible( obj ); console.log( panduan );// 顯示 false密封對象
表示不能添加新的屬性或方法,也不能對已有的屬性或方法進行修改
Object.seal()方法表示密封對象
Object.isSealed()方法
表示用于判斷指定對象是否密封
true - 表示密封
false - 表示沒密封
var obj = { ahh : "啊哈哈" // 表示可修改 }; console.log( Object.getOwnPropertyDescriptor( obj, "ahh" ) ); /* 將該對象進行密封 1.不能為該對象新增屬性或方法 2.不能修改該對象的屬性或方法的描述符 * configurable * enumerable */ /* 密封對象 */ Object.seal( obj ); console.log( Object.getOwnPropertyDescriptor( obj, "ahh" ) ); /* 判斷指定對象是否密封 */ var panduan = Object.isSealed( obj ); console.log( panduan );// 顯示 true凍結對象
表示禁止對指定對象的任何修改操作
Object.freeze()方法表示凍結對象
Object.isFrozen()方法
表示用于判斷指定對象是否凍結
true - 表示凍結
false - 表示沒凍結
var obj = { ahh : "啊哈哈" } /* 凍結對象 */ Object.freeze( obj ); /* 對已經凍結的對象使用Object.defineProperty()方法進行操作 * 會報錯 * TypeError: Cannot define property age, object is not extensible */ Object.defineProperty( obj, "age", { value : 18 } ); console.log( obj );//顯示 Cannot define property age, object is not extensible /* 判斷指定對象是否密封 */ var panduan = Object.isFrozen( obj ); console.log( panduan );// 顯示 true
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/108172.html
摘要:很多情況下,通常一個人類,即創建了一個具體的對象。對象就是數據,對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個人類,即創建了一個具體的對象。對象就是數據,對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個人類,即創建了一個具體的對象。對象就是數據,對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:之面向對象總結前言在中是沒有類的概念的,所以它的對象與基于類的語言中的對象不同。一理解對象張三上面通過構造函數創建了一個對象,并為它添加了三個屬性。 JavaScript之面向對象總結 前言:在ECMAScript中是沒有類的概念的,所以它的對象與基于類的語言中的對象不同。ECMA-262把對象總結為:無序屬性的集合,其屬性包含基本值、對象或者函數。 一、理解對象 var person...
摘要:一原型概括原型是什么對象包含數學方法的函數,函數定義在屬性,初始值為一個空對象原型的屬性和方法不會影響函數自身的屬性和方法類型的屬性所有函數都具有的屬性定義函數原型的默認值是空對象函數包含構造函數所有引用類型其實都是構造函數獲取原型通過 JS(JavaScript)一.原型1.概括 原型是什么 Function對象包含數學方法的函數,函數定義在protoype屬性,初始值為一個空對象原...
閱讀 1749·2023-04-25 23:43
閱讀 930·2021-11-24 09:39
閱讀 728·2021-11-22 15:25
閱讀 1727·2021-11-22 12:08
閱讀 1097·2021-11-18 10:07
閱讀 2082·2021-09-23 11:22
閱讀 3352·2021-09-22 15:23
閱讀 2507·2021-09-13 10:32