Object.create()使用方法

语法:

        Object.create(proto,[propertiesObject])

用法:

        使用指定的原型对象和属性创建一个新对象。

参数:

        proto:新创建对象的原型对象

        propertiesObject:创建对象的描述对象,如果该参数被指定且不为 undefined,该传入对象的自          有可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)将为新创建的对象添加            指定的属性值和对应的属性描述符。

示例代码:

        

let obj1 = {
        name:'zs',
        age:15
      }

let obj3 = Object.create(obj1,{
        hate:{
          value:'laoshu',//属性值
          enumerable:true,//可遍历
          writable:true,//可修改
          configurable:true,//可删除
        },
        run:{
          configurable:true,
          get:function () {
            console.log('跑了');
            return '100米'
          },
          set:function(val){
            console.log(val);
            return val
          }
        }

      })

console.log(obj3)

打印输出:

我们可以看到并没有obj1的name和age属性,这是为什么呢,我们可以看Object.create的实现

Object.create =  function (o) {
    var F = function () {};
    F.prototype = o;
    return new F();
  };

可以看到,传入的proto属性被作为返回对象的原型对象传入到了原型之上,所以

属性描述对象

        用来描述对象的属性,控制它的行为,比如该属性是否可写、可遍历等等。这个内部数据结构称为“属性描述对象”(attributes object)。每个属性都有自己对应的属性描述对象,保存该属性的一些元信息。

{
  value:'value',//属性值
  enumerable:true,//可遍历
  writable:true,//可修改
  configurable:true,//可删除
  get:(){},//访问该属性时触发
  set:(){},//修改改属性时触发
}

Object.create(null)与字面量定义对象的区别

 let obj4 = Object.create(null)
    let obj5 = {}
    let obj6 = new Object
    console.log(obj4,'obj4');
    console.log(obj5,'obj5');
    console.log(obj6,'obj6');

可以看出:

1、对象字面量创建对象 ,new Object()  和  { }  效果是一样

2. 通过Object.create(null)创建的对象是非常纯净的,原型链的属性和方法都不会携带。这就非常适合数组对象开发的时候,从对象中取值,提高循环效率。

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值