Object.getPrototypeOf(object):調用對象父類原型上的方法;
function Person(){
this.method1 = function(){alert(1)}
}
Person.prototype.method2 = function(){alert(2);}
function Man(){
this.m1 = function(){
Object.getPrototypeOf(this).method1();
}
}
Man.prototype = new Person();
Man.prototype.m2 = function(){
Object.getPrototypeOf(this).method2();
}
var man = new Man();
man.m1();
man.m2();
Object.getOwnPropertyDescriptor(object, propertyname):獲取對象中屬性的ECMAScript對象;
var obj = {};
obj.a = "abc";
var descriptor = Object.getOwnPropertyDescriptor(obj, "a");
for(var prop in descriptor){
document.write(prop + ': ' + descriptor[prop]);
document.write("<br />");
}
/*
configurable: true
enumerable: true
value: abc
writable: true
*/
Object.defineProperty(object, propertyname, descriptor):將ECMAScript對象設置爲對象中的屬性.
var obj = {};
obj.a = "abc";
var descriptor = Object.getOwnPropertyDescriptor(obj, "a");
descriptor.writable = false;
Object.defineProperty(obj, "a", descriptor);
for(var prop in descriptor){
document.write(prop + ': ' + descriptor[prop]);
document.write("<br />");
}
/*
configurable: true
enumerable: true
value: abc
writable: false
*/
object.defineProperties(object, descriptors):用 ECMAScript對象 設置爲object中多個屬性的值.
var obj = {};
obj.a = "abc";
Object.defineProperties(obj,{
a:{
configurable: true,
enumerable: true,
value: 'aaa',
writable: false
}
});
var descriptor = Object.getOwnPropertyDescriptor(obj, "a");
for(var prop in descriptor){
document.write(prop + ': ' + descriptor[prop]);
document.write("<br />");
}
/*
configurable: true
enumerable: true
value: aaa
writable: false
*/
Object.getOwnPropertyNames(object):返回一個由對象屬性名組成的數組(包含不可枚舉的)
function a(){
this.a='1';
}
a.prototype.b='2';
var c=new a();
c.c='3';
alert(Object.getOwnPropertyNames(c));//a,c
Object.create(prototype, descriptors):創建一個原型爲[prototype](必需,可爲NULL),[descriptors](可選)爲ECMAScript對象的對象.
var a = Object.create({a:1,b:2}, {
c: {
value: "large",
enumerable: true
},
d: {
value: "round",
enumerable: true
}
});
Object.seal(object):鎖定對象,沒法修改對象的屬性,沒法加入新的屬性.並把ECMAScript對象的configurable設置爲false;
var obj = {};
obj.a = "abc";
Object.seal(obj);
var descriptor = Object.getOwnPropertyDescriptor(obj, "a");
for(var prop in descriptor){
document.write(prop + ': ' + descriptor[prop]);
document.write("<br />");
}
/*
configurable: false
enumerable: true
value: abc
writable: true
*/
Object.freeze(object):凍結對象,沒法修改對象的屬性,沒法加入新的屬性.
(與seal的區別爲,freeze會把對象的數據屬性的Writable設置爲false)
var obj = {};
obj.a = "abc";
Object.freeze(obj);
var descriptor = Object.getOwnPropertyDescriptor(obj, "a");
for(var prop in descriptor){
document.write(prop + ': ' + descriptor[prop]);
document.write("<br />");
}
/*
configurable: false
enumerable: true
value: abc
writable: false
*/
Object.preventExtensions(object):避免加新屬性加入對象(Extensible設置爲false);
var obj = { a: "1"};
Object.preventExtensions(obj);
document.write(Object.isExtensible(obj));//false
obj.newProp = 50;
document.write(obj.newProp);//undefined
Object.isSealed(object);
Object.isFrozen(object);
Object.isExtensible(object);
判斷對象是否爲鎖定,凍結,不可擴展的.(若是一個對象是凍結的,那其確定是密封的);
var obj = { a: "1"};
//Object.seal(obj);
Object.freeze(obj);
//Object.preventExtensions(obj);
alert(Object.isSealed(obj));
//alert(Object.isFrozen(obj));
//alert(Object.isExtensible(obj));
Object.keys(object):返回一個由對象可枚舉的屬性組成的數組.
function a(){
this.a='1';
}
var b=new a();
alert(Object.keys(b));//a