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