最近在看JavaScript原型時經(jīng)常會遇到Object的一些方法和屬性,特地去查看了相關資料,并將使用方法整理下來供參考印蔬。
在瀏覽器控制臺輸入Object.
就會出現(xiàn)如下圖所示的一些方法和屬性,其中也包含ES6新加入的屬性和方法,從中挑選一些常用的屬性和方法介紹戚嗅。
1 . ** creat** 創(chuàng)建一個擁有指定原型和若干個指定屬性的對象。
Object.create(proto, [ propertiesObject ])
proto 一個對象枢舶,作為新創(chuàng)建對象的原型懦胞。
propertiesObject 可選。該參數(shù)對象是一組屬性與值凉泄,存放新創(chuàng)建對象的屬性和值
var animal = {age:0};
var cat = Object.create(animal, {
name: {
value: 'tom', // cat的屬性name的值
writable: true, //當且僅當writable 為 true 時躏尉,cat的name屬性才能被賦值運算符改變,默認為 false
configurable: true, // 當且僅當該屬性的 configurable 為 true 時后众,該屬性描述符才能夠被改變胀糜,也能夠被刪除颅拦,默認為 false
enumerable: true // 當且僅當該屬性的 enumerable 為 true 時教藻,該屬性才能夠出現(xiàn)在對象的枚舉屬性中距帅,默認為 false
}
});
console.log(cat.name); // tom
console.log(cat.age); // 0
在創(chuàng)建cat對象時以animal作為原型,name是cat的一個屬性
2 . defineProperty 直接在一個對象上定義一個新屬性怖竭,或者修改一個已經(jīng)存在的屬性锥债, 并返回這個對象。
Object.defineProperty(obj, prop, descriptor)
obj : 需要定義屬性的對象痊臭。
prop : 需定義或修改的屬性的名字哮肚。
descriptor : 將被定義或修改的屬性的描述符。
var cat = {age:10};
console.log(cat.age); // 10
Object.defineProperty(cat, 'age', {
enumerable: false,
configurable: false,
writable: false,
value: 4
});
console.log(cat.age); // 4
可以看出將cat的age屬性值由10修改為4
3 . defineProperties 在一個對象上添加或修改一個或者多個自有屬性广匙,并返回該對象允趟。
var cat = {age: 10, name: 'tom'};
console.log(cat.age);
console.log(cat.name);
Object.defineProperties(cat, {
age: {
enumerable: false,
configurable: false,
writable: false,
value: 4
},
name: {
enumerable: false,
configurable: false,
writable: false,
value: 'jack'
}
});
console.log(cat.age);
console.log(cat.name);
4 . getPrototypeOf 返回指定對象的原型(也就是該對象內(nèi)部屬性[[Prototype]]的值)。
Object.getPrototypeOf(object)
*object : 返回該對象的原型鸦致。 *
var cat = {age: 10, name: 'tom'};
var obj = Object.create(cat);
console.log(Object.getPrototypeOf(obj)); // { age: 10, name: 'tom' }
5 . getOwnPropertyDescriptor 返回指定對象上一個自有屬性對應的屬性描述符潮剪。(自有屬性指的是直接賦予該對象的屬性,不需要從原型鏈上進行查找的屬性)
Object.getOwnPropertyDescriptor(obj, prop)
obj 在該對象上查看屬性
prop 一個屬性名稱分唾,該屬性的屬性描述符將被返回
var cat = {age: 10, name: 'tom'};
var result = Object.getOwnPropertyDescriptor(cat,'age');
console.log(result);
/* {
value: 10,
writable: true,
enumerable: true,
configurable: true
}
*/
6 . keys 方法會返回一個由給定對象的所有可枚舉自身屬性的屬性名組成的數(shù)組
Object.keys(obj)
obj : 返回該對象的所有可枚舉自身屬性的屬性名.
var cat = {age: 10, name: 'tom'};
var result = Object.keys(cat);
console.log(result); // [ 'age', 'name' ]
7 . preventExtensions 方法讓一個對象變的不可擴展抗碰,也就是永遠不能再添加新的自身屬性。
Object.preventExtensions(obj)
obj : 將要變得不可擴展的對象
var cat = {age: 10, name: 'tom'};
Object.preventExtensions(cat);
cat.sex='female';
console.log(cat); // { age: 10, name: 'tom' }
8 . isExtensible 方法判斷一個對象是否是可擴展的(是否可以在它上面添加新的屬性)绽乔。
Object.isExtensible(obj)
obj : 需要檢測的對象
var person = {name: 'douqing'};
var cat = {age: 10, name: 'tom'};
Object.preventExtensions(cat);
cat.sex='female';
console.log(cat); // { age: 10, name: 'tom' }
console.log(Object.isExtensible(cat)); // false
console.log(Object.isExtensible(person)); // true
9 . assign 方法可以把任意多個的源對象自身的可枚舉屬性拷貝給目標對象弧蝇,然后返回目標對象。
Object.assign(target, ...sources)
target : 目標對象折砸。
sources : 任意多個源對象看疗。
var cat = {age: 10, name: 'tom'};
var result = Object.assign({}, cat);
console.log(result); // { age: 10, name: 'tom' }
10 . is 方法用來判斷兩個值是否是同一個值。
Object.is(value1, value2)
value1 需要比較的第一個值睦授。
value2 需要比較的第二個值两芳。
var cat = {age: 10, name: 'tom'};
var person = {name: 'douqing'};
console.log(Object.is(1, 1)); // true
console.log(Object.is(person, cat)); // false
上面只是一些Object中常用的屬性方法,想要了解更多的可以點擊這里