ES5 object方法整理

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
相關文章
相關標籤/搜索