<script type="text/javascript">javascript
function forEach(o){
var html ="";
for(var i in o){
html += i+"="+o[i]+" ";
}
console.log(html);
console.log(o);
}html
//1
//Object.create(proto)
//Object.create(proto,descriptors)
//使用指定的原型和屬性來建立一個對象
//參數:
//proto:新建立對象的原型,可爲null
//descriptors:一個可選對象,把屬性名映射到屬性描述符
//返回一個新建立的對象,繼承自proto,同時擁有descriptors所秒速的屬性。java
var obj = Object.create({x:1,y:2},{
z:{value:3,writable:true,enumerable:true,configurable:true}
});prototype
forEach(obj)
obj.z=5
console.log(obj)htm
console.log("=====================================================")對象
//2
//Object.defineProperties(o,descriptors)
//建立或配置對象的多個屬性
//參數:
//o:要在其上建立或者配置屬性的對象
//descriptors:將屬性名映射到屬性描述符的對象
//返回對象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("=====================================================")ip
//3
//Object.defineProperty(o,name,desc)
//建立或配置對象的一個屬性
//參數:
//o:將在其上建立或配置屬性的對象
//name:將建立或配置的屬性名字
//desc:一個屬性描述符對象,描述要建立的新屬性或對現有屬性的修改
//返回對象o
Object.defineProperty(obj,"c",{value:"c",writable:false,enumerable:false,configurable:true})
forEach(obj);字符串
console.log("=====================================================")get
//4
//Object.freeze(o)
//將一個對象設爲不可改變,不會影響繼承屬性
//參數:
//o:要凍結的對象
//返回 true|false
var p = {x:1,y:2}
Object.freeze(p);
p.x =2;
console.log(p);
console.log(Object.isFrozen(p)) //true,一旦凍結 沒法解凍
console.log("=====================================================")
//5
//Object.getOwnPropertyDescriptor(o,name)
//參數:
//o:一個對象
//name:待查詢的屬性名
//查詢一個屬性的特性
//返回對象指定屬性的一個屬性描述符對象,若是不存在指定屬性則返回undefined.
/*
屬性描述符就是一個普通的javascript對象,描述某個對象的特性,有二種javascript屬性。數據屬性有一個值以及三個性質:可枚舉性(enumerable)、
可寫性(writable)、以及可配置性(configurable).訪問器屬性(accessor property)有一個getter和/或setter方法,以及可枚舉性。
數據屬性的描述符:
{
value:任意javascript值,
writable: true|false,
enumerable: true|false,
configurable:true|false
}
訪問器屬性的描述符:
{
get: function 或 undefined :替換屬性值
set: function 或 undefined :替換可寫性
enumerable:true|false,
configurable:true|false
}
*/
var o5 = Object.getOwnPropertyDescriptor(obj,"c");
console.log(o5);
forEach(o5);
console.log("=====================================================")
//6
//Object.getOwnPropertyNames(o)
//返回非繼承屬性的名字
//參數:
//o:一個對象
//返回一個包含o的全部非繼承屬性的名字,包括哪些不可枚舉的屬性。{enumerable:false}
var o6 = Object.getOwnPropertyNames(obj);
console.log(o6);
console.log("=====================================================")
//7
//Object.getPrototypeOf(o)
//參數:
//o:一個對象
//返回一個對象的原型
var o7 =Object.getPrototypeOf(obj);
console.log(o7);
console.log("=====================================================")
//8
//Object.hasOwnProperty(propname);
//參數:
//propname包含對象的屬性名的字符串
//檢查一個屬性是不是繼承的
//返回true|false
console.log(obj.hasOwnProperty("x")); //=>false
console.log(obj.hasOwnProperty("z")); //=>true
console.log("=====================================================")
//9
//Object.isExtensible(o);
//判斷某個對象上是否能夠添加新屬性
//參數:
//o:待檢查可擴展性的對象
//返回 能添加爲true|不能爲false
//描述:全部的對象在建立的時候都是可擴展的,直到他們被傳入 Object.preventExtensions(o) Object.seal(o) 或 Object.freeze(o);
console.log(Object.isExtensible(obj)); // =>true
//Object.preventExtensions(obj)//將它設置爲不可擴展
//console.log(Object.isExtensible(obj)); //=>false
console.log("=====================================================")
//10
//Object.isFrozen(o)
//判斷對象是否不可改變
//參數:
//o:待檢查的對象
//若是o已凍結並不改變則爲true;不然爲false;
console.log("=====================================================")
//11
//object.isPrototypeOf(o)
//判斷當前對象是否爲另外一個對象的原型
//參數:
//o:全部對象
//若是object是o的原型 則爲true,若是o不是一個對象或者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)
//判斷一個對象的屬性是否可添加或刪除
//參數:
//o:待檢查的對象
//若是o是封閉的則爲true,不然爲false.
//若是不能夠向一個對象添加新的(非繼承)屬性,而且現有的(非繼承)屬性不可刪除,則是封閉的。
//封閉一個對象經常使用的方法是Object.seal(o) 或 Object.freeze(o)
console.log("=====================================================")
//13
//object.keys(o)
//返回自由的可枚舉屬性名
//參數:
//o:一個對象
console.log(Object.keys({x:1,y:2}) ) //=>[x,y]
console.log("=====================================================")
//14
//Object.preventExtensions(o)
//禁止在一個對象上添加新的屬性
//參數:
// o:待設置可擴展的對象
//一旦設爲不可不可擴展,它就不再能改成可擴展
console.log("=====================================================")
//15
//object.propertyIsEnumerable(propname)
//檢測某個屬性是否在for/in 中 循環可見
//參數
//propname:包含對象的指定屬性名的一個字符串
//若是對象有一個名爲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)
//阻止添加或刪除對象的屬性
//參數
//o:待封閉的對象
//返回處於封閉狀態的參數對象o
//17
//Object.toLocaleString()
//返回對象本地的本地化字符串標示
//Object類提供的默認的toLocaleString()方法只是簡單的調用toString()方法。
//不過要注意,其餘類(Array、Date、Number等)都各自定義本身的這個方法的版本。用於執行本地化字符串轉換。定義本身的的類時,可能也須要覆蓋這個方法。
//18
//object.toString()
//定義一個對象的字符串表示形式
//在javascript程序中通常不會常常顯示的調用toString()方法。通常狀況下,在對象中定義這個方法,系統會在須要時自動調用它以便將該對象裝換成字符串。
//19//Object.valueOf()//給定對象的原始值//返回 與指定對象關聯的原始值,若是存在這樣一個值的話,若是沒有與改對象關聯的值,則返回對象自己