0
点赞
收藏
分享

微信扫一扫

js高级.对象的属性及方法.描述对象属性.原型链

圣杰 2022-04-04 阅读 157
javascript

js高级 对象的属性及方法 描述对象属性 原型链

以对象为原型创建一个新对象 Object.create()

var o={a:1};
var o1=Object.create(o);
o1.b=2;

描述对象属性:

var o1={z:10};
var o=Object.create(o1);	//以o1为原型创建o对象
o.a=1;
Object.defineProperty(o,"b",{
    configurable:true,//是否可删除属性和可修改描述对象属性   o.b可删除
    enumerable:true,//是否可枚举属性				可通过for  in   枚举
    writable:true,//是否可写属性			可写
    value:1//值
        })
delete o.b;
console.log(o);

Object.assign()合并复制对象,浅复制,并返回复制后的目标对象,只复制对象属性,不能赋值原型链属性,不能复制不可枚举属性

var o={a:1};
var o1={b:2};
Object.defineProperty(o1,"hello",{
    onfigurable:true,//可删除属性和可修改描述对象
    enumerable:false,//不可枚举属
    writable:true,//可写
    value:1//值
})
    var o3={c:3};
    var o4={d:4};
    var o5=Object.assign(o,o1,o3,o4);
    console.log(o)   //{a: 1, b: 2, c: 3, d: 4}

作用:

​ onfigurable 保护对象该键值对,不被删除和修改

​ enumerable 不暴露对象中该键值对

​ writable 对象中该键值对为只读

描述对象中属性缺少时,该属性默认为false

var o = {a:1}
        // 描述对象中属性缺省时,该属性默认为false
Object.defineProperty(o,"b",{
    value:2
})
delete o.b;  // 不起作用
for(var key in o){
     console.log(o[key])   //只输出 1  
}
console.log(o) // {a:1,b:2}

var o = {a:1}
// 给对象定义多个属性
Object.defineProperties(o,{
    b:{
       numerable:true,  //可枚举
       configurable:true,	//可删除修改
       value:1
    },
    c:{
       writable:true,	//可写
       configurable:true,   //可删除修改
       value:2
    }
})
var x=Symbol();
o[x]=10;
for(var key in o){  
    console.log(key) // 只输出 a,b    Symbol()对象不可枚举
}
console.log(o)  //{a: 1, b: 1, c: 2, Symbol(): 10}

// 获取当前对象的所有属性,包括不可枚举属性,并且返回一个属性组成的数组
// 不能获取到原型链属性,不能获取Symbol属性
var names=Object.getOwnPropertyNames(o)
console.log(names);   // ['a', 'b', 'c']

//    专门获取Symbol属性
var namesSymbol=Object.getOwnPropertySymbols(o);
console.log(namesSymbol)  //[Symbol()]

// 可以获取到对象的所有属性,包括Symbol属性
var names=Reflect.ownKeys(o);
console.log(names);   //['a', 'b', 'c',Symbol()]

// 获取对象下某属性的描述对象
var desc=Object.getOwnPropertyDescriptor(o,"c");
console.log(desc);  //{value: 2, writable: true, enumerable: false, configurable: true}

// 获取对象中所有属性的描述对象  
var desc=Object.getOwnPropertyDescriptors(o)
console.log(desc)

Object.entries() 将对象转为迭代器数组 对象转Map

    var o={a:1,b:2,c:3};
    console.log(Object.entries(o));//[['a', 1],['b',2],['c',3]]

// 使用entries将对象转换为迭代器数组,并且放在map中
    var m=new Map(Object.entries(o));
    m.forEach((value,key)=>{
        console.log(value,key)   
    })
// 1  'a'
// 2  'b'
// 3  'c'

Object.fromEntries() 将map转对象 ,对set没有作用,会报错 ,可以将formData 转为对象

// 键值对的类型可以通过Object.fromEntries转换为对象
    var m=new Map();
    m.set("a",1);
    m.set("b",2);
    m.set("c",3);
        // 将迭代器变为对象
    console.log(Object.fromEntries(m));  {a:1,b:2,c:3}

​ Object.freeze(o); 冻结 就是将对象中所有属性设置为不可删除,不可修改,不可扩展添加

​ console.log(Object.isFrozen(o)); 判断是否冻结

​ Object.preventExtensions(o); 设置不可扩展对象 可以修改,可以删除,但是不可以扩展添加

​ console.log(Object.isExtensible(o)) 判断是否禁止扩展

​ Object.getPrototypeOf(o1) 获取o1的原型链 等同 o1.proto

​ Object.setPrototypeOf(o1,o); 将某个对象设置为另一个对象的原型链 将o作为o1的原型链

​ Object.keys(o) 只能获取到可以枚举的字符串属性

Object.values(o) 获取对象下可以枚举的字符串属性的值

举报

相关推荐

0 条评论