javascript中Object使用詳解
function forEach(o){
var html ="";
for(var i in o){
html += i+"="+o[i]+" ";
}
console.log(html);
console.log(o);
}
//1
//Object.create(proto)
//Object.create(proto,descriptors)
//使用指定的原型和屬性來(lái)創(chuàng)建一個(gè)對(duì)象
//參數(shù):
//proto:新創(chuàng)建對(duì)象的原型,可為null
//descriptors:一個(gè)可選對(duì)象,把屬性名映射到屬性描述符
//返回一個(gè)新創(chuàng)建的對(duì)象,繼承自proto,同時(shí)擁有descriptors所秒速的屬性。
var obj = Object.create({x:1,y:2},{
z:{value:3,writable:true,enumerable:true,configurable:true}
});
forEach(obj)
obj.z=5
console.log(obj)
console.log("=====================================================")
//2
//Object.defineProperties(o,descriptors)
//創(chuàng)建或配置對(duì)象的多個(gè)屬性
//參數(shù):
//o:要在其上創(chuàng)建或者配置屬性的對(duì)象
//descriptors:將屬性名映射到屬性描述符的對(duì)象
//返回對(duì)象o
Object.defineProperties(obj,{
a:{value:"a",writable:false,enumerable:true,configurable:true},
b:{value:"b",writable:false,enumerable:true,configurable:true}
})
forEach(obj);
console.log("=====================================================")
//3
//Object.defineProperty(o,name,desc)
//創(chuàng)建或配置對(duì)象的一個(gè)屬性
//參數(shù):
//o:將在其上創(chuàng)建或配置屬性的對(duì)象
//name:將創(chuàng)建或配置的屬性名字
//desc:一個(gè)屬性描述符對(duì)象,描述要?jiǎng)?chuàng)建的新屬性或?qū)ΜF(xiàn)有屬性的修改
//返回對(duì)象o
Object.defineProperty(obj,"c",{value:"c",writable:false,enumerable:false,configurable:true})
forEach(obj);
console.log("=====================================================")
//4
//Object.freeze(o)
//將一個(gè)對(duì)象設(shè)為不可改變,不會(huì)影響繼承屬性
//參數(shù):
//o:要凍結(jié)的對(duì)象
//返回 true|false
var p = {x:1,y:2}
Object.freeze(p);
p.x =2;
console.log(p);
console.log(Object.isFrozen(p)) //true,一旦凍結(jié) 無(wú)法解凍
console.log("=====================================================")
//5
//Object.getOwnPropertyDescriptor(o,name)
//參數(shù):
//o:一個(gè)對(duì)象
//name:待查詢的屬性名
//查詢一個(gè)屬性的特性
//返回對(duì)象指定屬性的一個(gè)屬性描述符對(duì)象,如果不存在指定屬性則返回undefined.
/*
屬性描述符就是一個(gè)普通的javascript對(duì)象,描述某個(gè)對(duì)象的特性,有二種javascript屬性。數(shù)據(jù)屬性有一個(gè)值以及三個(gè)性質(zhì):可枚舉性(enumerable)、
可寫(xiě)性(writable)、以及可配置性(configurable).訪問(wèn)器屬性(accessor property)有一個(gè)getter和/或setter方法,以及可枚舉性。
數(shù)據(jù)屬性的描述符:
{
value:任意javascript值,
writable: true|false,
enumerable: true|false,
configurable:true|false
}
訪問(wèn)器屬性的描述符:
{
get: function 或 undefined :替換屬性值
set: function 或 undefined :替換可寫(xiě)性
enumerable:true|false,
configurable:true|false
}
*/
var o5 = Object.getOwnPropertyDescriptor(obj,"c");
console.log(o5);
forEach(o5);
console.log("=====================================================")
//6
//Object.getOwnPropertyNames(o)
//返回非繼承屬性的名字
//參數(shù):
//o:一個(gè)對(duì)象
//返回一個(gè)包含o的所有非繼承屬性的名字,包括哪些不可枚舉的屬性。{enumerable:false}
var o6 = Object.getOwnPropertyNames(obj);
console.log(o6);
console.log("=====================================================")
//7
//Object.getPrototypeOf(o)
//參數(shù):
//o:一個(gè)對(duì)象
//返回一個(gè)對(duì)象的原型
var o7 =Object.getPrototypeOf(obj);
console.log(o7);
console.log("=====================================================")
//8
//Object.hasOwnProperty(propname);
//參數(shù):
//propname包含對(duì)象的屬性名的字符串
//檢查一個(gè)屬性是否是繼承的
//返回true|false
console.log(obj.hasOwnProperty("x")); //=>false
console.log(obj.hasOwnProperty("z")); //=>true
console.log("=====================================================")
//9
//Object.isExtensible(o);
//判斷某個(gè)對(duì)象上是否可以添加新屬性
//參數(shù):
//o:待檢查可擴(kuò)展性的對(duì)象
//返回 能添加為true|不能為false
//描述:所有的對(duì)象在創(chuàng)建的時(shí)候都是可擴(kuò)展的,直到他們被傳入 Object.preventExtensions(o) Object.seal(o) 或 Object.freeze(o);
console.log(Object.isExtensible(obj)); // =>true
//Object.preventExtensions(obj)//將它設(shè)置為不可擴(kuò)展
//console.log(Object.isExtensible(obj)); //=>false
console.log("=====================================================")
//10
//Object.isFrozen(o)
//判斷對(duì)象是否不可改變
//參數(shù):
//o:待檢查的對(duì)象
//如果o已凍結(jié)并不改變則為true;否則為false;
console.log("=====================================================")
//11
//object.isPrototypeOf(o)
//判斷當(dāng)前對(duì)象是否為另一個(gè)對(duì)象的原型
//參數(shù):
//o:所有對(duì)象
//如果object是o的原型 則為true,如果o不是一個(gè)對(duì)象或者object不是o的原型 則為false.
var o = new Object();
Object.prototype.isPrototypeOf(o) // true
Array.prototype.isPrototypeOf([1,2]) //true;
Object.prototype.isPrototypeOf(Function.prototype) //true
console.log("=====================================================")
//12
//Object.isSealed(o)
//判斷一個(gè)對(duì)象的屬性是否可添加或刪除
//參數(shù):
//o:待檢查的對(duì)象
//如果o是封閉的則為true,否則為false.
//如果不可以向一個(gè)對(duì)象添加新的(非繼承)屬性,并且現(xiàn)有的(非繼承)屬性不可刪除,則是封閉的。
//封閉一個(gè)對(duì)象常用的方法是Object.seal(o) 或 Object.freeze(o)
console.log("=====================================================")
//13
//object.keys(o)
//返回自由的可枚舉屬性名
//參數(shù):
//o:一個(gè)對(duì)象
console.log(Object.keys({x:1,y:2}) ) //=>[x,y]
console.log("=====================================================")
//14
//Object.preventExtensions(o)
//禁止在一個(gè)對(duì)象上添加新的屬性
//參數(shù):
// o:待設(shè)置可擴(kuò)展的對(duì)象
//一旦設(shè)為不可不可擴(kuò)展,它就再也不能改為可擴(kuò)展
console.log("=====================================================")
//15
//object.propertyIsEnumerable(propname)
//檢測(cè)某個(gè)屬性是否在for/in 中 循環(huán)可見(jiàn)
//參數(shù)
//propname:包含對(duì)象的指定屬性名的一個(gè)字符串
//如果對(duì)象有一個(gè)名為propname的非繼承屬性,并且該屬性可以枚舉,則返回true.
var o15 = new Object();
o15.x = 15;
o15.propertyIsEnumerable("x"); //true;
o15.propertyIsEnumerable("y"); //false;
o15.propertyIsEnumerable("toString"); //false;
console.log("=====================================================")
//16
//Object.seal(o)
//阻止添加或刪除對(duì)象的屬性
//參數(shù)
//o:待封閉的對(duì)象
//返回處于封閉狀態(tài)的參數(shù)對(duì)象o
//17
//Object.toLocaleString()
//返回對(duì)象本地的本地化字符串標(biāo)示
//Object類提供的默認(rèn)的toLocaleString()方法只是簡(jiǎn)單的調(diào)用toString()方法。
//不過(guò)要注意,其他類(Array、Date、Number等)都各自定義自己的這個(gè)方法的版本。用于執(zhí)行本地化字符串轉(zhuǎn)換。定義自己的的類時(shí),可能也需要覆蓋這個(gè)方法。
//18
//object.toString()
//定義一個(gè)對(duì)象的字符串表示形式
//在javascript程序中一般不會(huì)經(jīng)常顯示的調(diào)用toString()方法。一般情況下,在對(duì)象中定義這個(gè)方法,系統(tǒng)會(huì)在需要時(shí)自動(dòng)調(diào)用它以便將該對(duì)象裝換成字符串。
//19
//Object.valueOf()
//給定對(duì)象的原始值
//返回 與指定對(duì)象關(guān)聯(lián)的原始值,如果存在這樣一個(gè)值的話,如果沒(méi)有與改對(duì)象關(guān)聯(lián)的值,則返回對(duì)象本身
相關(guān)文章
Openlayers實(shí)現(xiàn)根據(jù)半徑繪制圓形
這篇文章主要介紹了利用Openlayers實(shí)現(xiàn)繪制三個(gè)圓形,繪制完成之后,三個(gè)圓心連接起來(lái),然后標(biāo)記出每?jī)蓚€(gè)圓心之間的距離,感興趣的可以了解一下2022-08-08
Windows Live的@live.com域名注冊(cè)漏洞 利用代碼
Windows Live的@live.com域名注冊(cè)漏洞 利用代碼...2006-12-12
微信小程序?qū)崿F(xiàn)密碼顯示與隱藏的睜眼閉眼功能
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)密碼顯示與隱藏的睜眼閉眼功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-02-02
ES6中的Promise對(duì)象與async和await方法詳解
Promise是es6引入的異步編程薪解決方案,語(yǔ)法上promise就是一個(gè)構(gòu)造函數(shù),用來(lái)封裝異步操作病可以獲取其成功或失敗的結(jié)果,這篇文章主要介紹了ES6中的Promise對(duì)象與async和await方法,需要的朋友可以參考下2022-12-12
Javascript實(shí)現(xiàn)表單檢驗(yàn)
這篇文章主要介紹了Javascript實(shí)現(xiàn)表單檢驗(yàn),以注冊(cè)界面為例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
JS獲取當(dāng)前日期時(shí)間并定時(shí)刷新示例
這篇文章主要介紹了JS如何獲取當(dāng)前日期時(shí)間并執(zhí)行定時(shí)刷新,示例代碼如下,需要的朋友不要錯(cuò)過(guò)2014-06-06
解決循環(huán)中setTimeout執(zhí)行順序的問(wèn)題
今天小編就為大家分享一篇解決循環(huán)中setTimeout執(zhí)行順序的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06

