zoukankan      html  css  js  c++  java
  • Object.create()和new object()和{}的区别

    Object.create()介绍
    Object.create(null) 创建的对象是一个空对象,在该对象上没有继承 Object.prototype 原型链上的属性或者方法,例如:toString(), hasOwnProperty()等方法

    Object.create()方法接受两个参数:Object.create(obj,propertiesObject) ;

    obj:一个对象,应该是新创建的对象的原型。

    propertiesObject:可选。该参数对象是一组属性与值,该对象的属性名称将是新创建的对象的属性名称,值是属性描述符(这些属性描述符的结构与Object.defineProperties()的第二个参数一样)。注意:该参数对象不能是 undefined,另外只有该对象中自身拥有的可枚举的属性才有效,也就是说该对象的原型链上属性是无效的。

    var o = Object.create(Object.prototype, {
      // foo会成为所创建对象的数据属性
      foo: { 
        writable:true,
        configurable:true,
        value: "hello" 
      },
      // bar会成为所创建对象的访问器属性
      bar: {
        configurable: false,
        get: function() { return 10 },
        set: function(value) {
          console.log("Setting `o.bar` to", value);
        }
      }
    });

    console.log(o);//{foo:'hello'}

    var test1 = Object.create(null) ;
    console.log(test1);// {} No Properties 

    因为在bar中设置了configurable 使用set,get方法默认都是不起作用,所以bar值无法赋值或者获取
    这里的o对象继承了 Object.prototype  Object上的原型方法

    我们可以 对象的 __proto__属性,来获取对象原型链上的方法 如:

    console.log(o.__proto__);//{__defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, __lookupSetter__: ƒ, …}
    console.log(test1.__proto__);//undefined

  • 相关阅读:
    大前端完整学习路线(详解)
    浅谈攻击Web应用常见的技术手段
    浅谈XSS跨站脚本攻击
    利用SQL注入漏洞登录后台
    1、MyBatis框架底层初涉
    1、用静态工厂方法代替构造器
    日志管理-log4j与slf4j的使用
    Java的值类型和引用类型
    自动任务调度
    2、Hibernate持久化编写
  • 原文地址:https://www.cnblogs.com/zhx119/p/12598844.html
Copyright © 2011-2022 走看看