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
  • 相关阅读:
    2.5.4 使用popupWindow
    2.5.3 使用alertDialog创建自定义对话框
    2.5.2 使用alertdialog 创建列表对话框
    2.5.1 使用alertDialog
    2.4.12 画廊视图
    2.4.11 网格视图和图像切换器
    2.4.10 可展开的列表组件
    2.4.9 列表视图
    2.4.8 滚动视图
    2.4.7 选项卡的功能和用法
  • 原文地址:https://www.cnblogs.com/3yleaves/p/9613505.html
Copyright © 2011-2022 走看看