zoukankan      html  css  js  c++  java
  • constructor&object 的联系与区别

    构造函数与对象

    构造函数是类中的特殊成员函数,用于为对象分配内存。它可用于为数据成员提供值。创建对象时将调用构造函数。它与类具有相同的名称。构造函数不返回任何值。

    Constructor:是用于创建和初始化类中创建的一种特殊方法。constructor属性返回对创建此对象的数组函数的引用。 

     语法

    object.constructor

    constructor([arguments])

       { ... }

    派生类构造函数:

    Constructor(.....args){

      Super(...args);

    }

     

    在一个类中只能有一个名为 “constructor”的特殊方法。 一个类中出现多次构造函数 (constructor)方法将会抛出一个 SyntaxError 错误。

    在一个构造方法中可以使用super关键字来调用一个父类的构造方法。

    如果没有显式指定构造方法,则会添加默认的 constructor 方法。

    如果不指定一个构造函数(constructor)方法, 则使用一个默认的构造函数(constructor)。

    <script type="text/javascript">

    var test=new Array();

    if (test.constructor==Array)

    {

      document.write("This is an Array");

    }

    if (test.constructor==Boolean)

    {

      document.write("This is a Boolean");

    }

    if (test.constructor==Date)

    {

      document.write("This is a Date");

    }

    if (test.constructor==String)

    {

      document.write("This is a String");

    }

    </script>

    输出:

    This is an Array

    Object:

    Object对象,是所有JavaScript对象的超类(基类)。Object.prototype(Obecjt的原型)定义了Js对象的基本方法和属性。

    在定义以后,不能在使用new创建对象实例,可以复制给其他变量,多个变量同时引用一个对象,或者克隆对象。具有多态性,无法继承,除非用复制的方式来实现

    (1)Object.assign()

    可以用作对象的复制

    var obj = { a: 1 };

    var copy = Object.assign({}, obj);

    console.log(copy); // { a: 1 }

    可以用作对象的合并 

    var o1 = { a: 1 };

    var o2 = { b: 2 };

    var o3 = { c: 3 };

    var obj = Object.assign(o1, o2, o3);

    console.log(obj); // { a: 1, b: 2, c: 3 }

    console.log(o1);  // { a: 1, b: 2, c: 3 }, 注意目标对象自身也会改变。

    (2)Object.is() 

    Object.is('haorooms', 'haorooms');     // true

    Object.is(window, window);   // true

    Object.is('foo', 'bar');     // false

    Object.is([], []);           // false

    var test = { a: 1 };

    Object.is(test, test);       // true

    Object.is(null, null);       // true

    // 特例

    Object.is(0, -0);            // false

    Object.is(-0, -0);           // true

    Object.is(NaN, 0/0);         // true

    (3)Object.keys()

    这个方法会返回一个由给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致 (两者的主要区别是 一个 for-in 循环还会枚举其原型链上的属性)。

    /* 类数组对象 */

    var obj = { 0 : "a", 1 : "b", 2 : "c"};

    alert(Object.keys(obj));

    // 弹出"0,1,2"

    /* 具有随机键排序的数组类对象 */

    var an_obj = { 100: 'a', 2: 'b', 7: 'c' };

    console.log(Object.keys(an_obj));

    // console: ['2', '7', '100']

    (4)Object.create() 

    Object.create(proto, [ propertiesObject ])

    第二个参数是可选的,主要用于指定我们创建的对象的一些属性,

    例:ar o;

    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) }

    }}

    *********转自https://www.cnblogs.com/axl1017/p/9947986.html

  • 相关阅读:
    【转】Android 6.0 Marsmallow BLE : Connection Parameters
    过滤掉字符串中重复的字符
    从第一个汉字开始分割字符串
    根据年月生成日历函数
    计算两个日期之间的工作日
    根据日期返回星座
    检查给定串是否存在于由区间及点集的结合内
    将整型数字转换为大写汉字
    向左填充指定字符串
    人民币小写金额转大写
  • 原文地址:https://www.cnblogs.com/shjnb/p/10016910.html
Copyright © 2011-2022 走看看