zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

JS 分析 关于 一些 细节
2023-06-13 09:14:27 时间
1,参数是一个对象,核心js对象(nativeECMAScriptobject)或宿主对象(hostobject),那么将直接返回该对象。
其生成的对象构造器仍然是所传参数对象的构造器。这样造成的后果是虽然该对象是newObject,但其constructor不一定是Object。
复制代码代码如下:

functionPerson(){this.name="jack";}
varw=newObject(window),
d=newObject(document),
p=newObject(newPerson());

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

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

vars=newObject("hello"),
n=newObject(22),
b=newObject(true);

console.log(typeofs);//->Object
console.log(typeofn);//->Object
console.log(typeofb);//->Object

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

从以上看出,当传参数时,使用newObject生成的对象其构造器不一定指向Object,只有很巧的时候会指向Object,如
复制代码代码如下:
varobj1=newObject,
obj2={};
varo1=newObject(obj1);
o2=newObject(obj2);

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

以上就能明了为何jquery1.4+中以下代码返回false了
复制代码代码如下:
functionPerson(){this.name="jack";}
varp=newPerson();
$.isPlainObject(newObject(4));//->false
$.isPlainObject(newObject("hello"));//->false
$.isPlainObject(newObject(true));//->false
$.isPlainObject(newObject(p));//->false