• js中关于new Object时传参的一些细节分析


    1, 参数是一个对象,核心js对象(native ECMAScript object)或宿主对象(host object),那么将直接返回该对象。
    其生成的对象构造器仍然是所传参数对象的构造器。这样造成的后果是虽然该对象是new Object,但其constructor不一定是Object。

    复制代码 代码如下:

    function Person(){this.name='jack';}
    var w = new Object(window),
    d = new Object(document),
    p = new Object(new Person());

    console.log(w.constructor); //-> Window
    console.log(d.constructor); //-> HTMLDocument
    console.log(p.constructor); //-> Person


    2, 参数是基本类型对象,如字符串(String),数字(Number),布尔值(Boolean),将其包装成对象(转换成其对应的包装类)后返回。

    复制代码 代码如下:

    var s = new Object('hello'),
    n = new Object(22),
    b = new Object(true);

    console.log(typeof s); //-> Object
    console.log(typeof n); //-> Object
    console.log(typeof b); //-> Object

    console.log(s.constructor); //-> String
    console.log(n.constructor); //-> Number
    console.log(b.constructor); //-> Boolean


    从以上看出,当传参数时,使用new Object生成的对象其构造器不一定指向Object,只有很巧的时候会指向Object,如

    复制代码 代码如下:

    var obj1 = new Object,
    obj2 = {};
    var o1 = new Object(obj1);
    o2 = new Object(obj2);

    console.log(o1.constructor); //-> Object
    console.log(o2.constructor); //-> Object


    以上就能明了为何jquery1.4+中以下代码返回false了

    复制代码 代码如下:


    function Person(){this.name='jack';}
    var p = new Person();
    $.isPlainObject(new Object(4)); //-> false
    $.isPlainObject(new Object('hello')); //-> false
    $.isPlainObject(new Object(true)); //-> false
    $.isPlainObject(new Object(p)); //-> false

  • 相关阅读:
    CCNode作为容器实现显示区域剪裁
    使用CCNode作为容器容易踩的坑
    走了很多弯路的CCScrollView
    常用es6特性归纳-(一般用这些就够了)
    WebP图片优化
    es6 Promise 异步函数调用
    网站性能优化
    dom元素分屏加载
    js顺序加载与并行加载
    移动端真机调试
  • 原文地址:https://www.cnblogs.com/yanan-boke/p/7446400.html
Copyright © 2020-2023  润新知