知食记
搜索文档…
Object.create(null)与{}

Object.create实现

1
Object.create = funtion(o){
2
var f = function(){};
3
f.prototype = o;
4
return new f();
5
}
Copied!

Object.create(null)输出

1
let a = Object.create(null)
2
console.log(a)
3
4
------------------
5
{}
6
no properties
Copied!

{}输出

1
let o = {}
2
console.log(o)
3
4
--------------------
5
{}
6
__proto__:
7
constructor
8
hasOwnProperty
9
isPrototypreOf
10
...
Copied!
使用create创建的对象,没有任何属性,显示No properties,我们可以把它当作一个非常纯净的map来使用,我们可以自己定义hasOwnPropertytoString方法,不管是有意还是不小心,我们完全不必担心会将原型链上的同名方法覆盖掉。
1
//Demo1:
2
var a= {...省略很多属性和方法...};
3
//如果想要检查a是否存在一个名为toString的属性,你必须像下面这样进行检查:
4
if(Object.prototype.hasOwnProperty.call(a,'toString')){
5
...
6
}
7
//为什么不能直接用a.hasOwnProperty('toString')?因为你可能给a添加了一个自定义的hasOwnProperty
8
//你无法使用下面这种方式来进行判断,因为原型上的toString方法是存在的:
9
if(a.toString){}
10
11
//Demo2:
12
var a=Object.create(null)
13
//你可以直接使用下面这种方式判断,因为存在的属性,都将定义在a上面,除非手动指定原型:
14
if(a.toString){}
Copied!