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

    Object.create()

    Object.create()方法规范化了原型式继承。这个方法接收两个参数:Object.create(obj,propertiesObject) ;

    obj:一个对象,用作新对象的原型对象

    propertiesObject:(可选的)为新对象定义额外属性的对象。该参数与 Object.defineProperties() 方法的第二个参数格式相同:每个属性都是通过自己的描述符定义的。以这种方式指定的任何属性都会覆盖原型对象上的同名属性。

    var cat = {
        name : 'Tom',
        color : 'black'
    };
    var test1 = Object.create(cat,{
        name : {
            value : 'Jack'
        },
        age : {
            value : 5
        }
    });
    console.log(test1.name);  //Jack
    console.log(test1.color); //black
    console.log(test1.age);   //5

    new Object() 和 {}

    var obj = { name :'Jack' };

    它其实等同于下面这样:

    var obj = new Object();
    obj.name = 'Jack' ;      

    {} 是以对象字面量的形式创建了一个对象,new Object() 是通过 Object 构造函数创建了一个对象

    上面两种方法从底层实现上是没有区别的。

    1.在传入一个参数的情况下, Object.create() 与 new Object()方法的行为相同。 

    var cat = {
        name : 'Tom'
    };
    var test1 = Object.create(cat);
    console.log(test1.name); //Tom
    
    var test2 = new Object(cat);
    console.log(test2.name); //Tom

    2.Object.create() 与 new Object() 的区别在于,创建的对象的原型对象不同。

    var cat = {
        name : 'Tom'
    };
    var test1 = Object.create(cat);
    var test2 = new Object(cat);
    console.log(test1.__proto__ == cat);               //true
    console.log(test2.__proto__ == Object.prototype);  //true
    console.log( cat.__proto__  == Object.prototype);  //true

    3.怎么使 Object.create() 等同于 new Object() 呢?

    var test1 = Object.create(Object.prototype);
    var test2 = new Object();
    console.log(test1.__proto__ == Object.prototype);  //true
    console.log(test2.__proto__ == Object.prototype);  //true
  • 相关阅读:
    outlook 2007无法连接exchange server时的解决方法
    Source模式和Design模式无法转换 在VS2008
    自定义CreateUserWizard 控件
    自定义CreateUserWizard 控件
    锋利的jQuery第三章
    Repeater控件的ItemDataBound事件
    jquery获取select,option所有的value和text
    Jquery中的缩写总结
    asp.net本质论学习笔记第二章
    jquery的append函数
  • 原文地址:https://www.cnblogs.com/3yleaves/p/9613505.html
Copyright © 2011-2022 走看看