这里讨论给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, 参数是一个对象,核心js对象(native ECMAScript object)或宿主对象(host object),那么将...} var w = new Object(window), d = new Object(document), p = new Object(new Person()); console.log(w.constructor)
String result = (String) call.invoke(new Object[]{"value1", 123}); System.out.println("服务返回结果:" + result); } catch (Exception e) { e.printStackTrace(); } } } ``` 在这个例子中,`...
#### 三、代码实现细节 ##### 3.1 Form1 ```csharp public partial class form1 : Form { string id = null; public form1() { InitializeComponent(); } private void Form1_Load(object sender, ...
C) Java中的封装就是将对象的数据和操作数据的方法相结合,通过方法将对象的数据和实现细节保护起来。 D) Java语言中的多态的含义可以表达为:对外一个接口,内部多种实现。Java语言支持两种多态:运行时多态和编译...
LinkedMultiValueMap, Object> multiValueMap = new LinkedMultiValueMap(); multiValueMap.add("username", "杰尼瑞"); multiValueMap.add("userpass", "123456"); HttpHeaders httpHeaders = new HttpHeaders...
- 面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它将数据和处理数据的方法组织成对象。对象是类的实例,类则定义了一组相关的属性和行为。OOP的主要特点是封装、继承和多态。这种设计方式使得...
这种方法允许复用父类的方法,但所有子类实例共享引用属性,且无法在实例化时传参。 ```javascript function object(o) { function F() {} F.prototype = o; return new F(); } var person = { name: ...
### Vue.js 基本内容总结学习 ...以上就是关于 Vue.js 的基本内容总结学习,涵盖了组件通信、异步渲染以及双向数据绑定原理等方面的知识点。希望这些内容能够帮助读者更好地理解和掌握 Vue.js 的核心概念和技术细节。