`
zhouyrt
  • 浏览: 1181911 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于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

 

 

 

 

 

分享到:
评论
1 楼 lixinlixin2008 2010-05-11  
顶....

相关推荐

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

    1, 参数是一个对象,核心js对象(native ECMAScript object)或宿主对象(host object),那么将...} var w = new Object(window), d = new Object(document), p = new Object(new Person()); console.log(w.constructor)

    webservice调用,传参代码样例

    String result = (String) call.invoke(new Object[]{"value1", 123}); System.out.println("服务返回结果:" + result); } catch (Exception e) { e.printStackTrace(); } } } ``` 在这个例子中,`...

    C#窗体间传值.doc

    #### 三、代码实现细节 ##### 3.1 Form1 ```csharp public partial class form1 : Form { string id = null; public form1() { InitializeComponent(); } private void Form1_Load(object sender, ...

    java经典面试2010集锦100题(不看你后悔)

    C) Java中的封装就是将对象的数据和操作数据的方法相结合,通过方法将对象的数据和实现细节保护起来。 D) Java语言中的多态的含义可以表达为:对外一个接口,内部多种实现。Java语言支持两种多态:运行时多态和编译...

    第三方接口访问(需要在SpringBoot环境下使用)

    LinkedMultiValueMap, Object> multiValueMap = new LinkedMultiValueMap(); multiValueMap.add("username", "杰尼瑞"); multiValueMap.add("userpass", "123456"); HttpHeaders httpHeaders = new HttpHeaders...

    C++常见问题解答(解决一些常见疑问)

    - 面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它将数据和处理数据的方法组织成对象。对象是类的实例,类则定义了一组相关的属性和行为。OOP的主要特点是封装、继承和多态。这种设计方式使得...

    对于JS继承详细介绍( 原型链,构造函数,组合,原型式,寄生式,寄生组合,Class extends)

    这种方法允许复用父类的方法,但所有子类实例共享引用属性,且无法在实例化时传参。 ```javascript function object(o) { function F() {} F.prototype = o; return new F(); } var person = { name: ...

    vue基本内容总结学习

    ### Vue.js 基本内容总结学习 ...以上就是关于 Vue.js 的基本内容总结学习,涵盖了组件通信、异步渲染以及双向数据绑定原理等方面的知识点。希望这些内容能够帮助读者更好地理解和掌握 Vue.js 的核心概念和技术细节。

Global site tag (gtag.js) - Google Analytics