zoukankan      html  css  js  c++  java
  • 关于new Object时传参的一些细节

    这里讨论给Object传参时,其内部的处理。参考:ECMA262 V5 15.2.2.1

    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
    
  • 相关阅读:
    【随手记】常用16进制代表的容量或位置
    精通css——position属性
    Ubuntu安装GitLab
    Linux内核
    分布式(一)——分布式系统的特性
    【树莓派】入门
    Intel CPU发展历史
    C++读mnist数据
    实验代码一:用来链表实现单向图
    Hadoop配置+centos6.5
  • 原文地址:https://www.cnblogs.com/snandy/p/1982009.html
Copyright © 2011-2022 走看看