JavaScript的Object.create()
JavaScript有几种方式可以创建对象
1 | var obj = new Object(); |
以上的两种方式创建的对象没有什么区别。
但是ES5加了一种新的方式
1 | var obj |
JavaScript有几种方式可以创建对象
1 | var obj = new Object(); |
以上的两种方式创建的对象没有什么区别。
但是ES5加了一种新的方式
1 | var obj = Object.create({a: 1}); |
但是在使用它的时候要很小心。
Object.create()的参数是原型对象,比如传入一个{a:1}。同样,你也可以传入null。
1 | var obj = Object.create(null); |
传入null意味着创建的这个对象没有继承任何东西,这会导致一些基础方法不可用比如toString()等等。
而且instanceof也会返回不正确的结果。
1 | var obj = Object.create(null); |
你一定会觉得很奇怪,为什么typeof是object,但是instanceof却返回false
查看js的文档就可以知道,instanceof比较的是
1 | Object.getPrototypeOf(obj) === Object.prototype |
这个时候用以下代码测试
1 | var obj = Object.create(null); |
这下就很清楚了,使用instanceof时,系统会比较他们的原型,使用Object.create(null)的对象没有继承任何原型,所以是null,所以跟Object的原型完全不同,所以即使typeof返回的是object,但是instanceof也会返回false。
如果想要使用Object.create()创建正常的对象该怎么做呢?其实很简单
1 | var obj = Object.create(Object.prototype); |
这样做会和{}和new Object()的效果一模一样,但是这个这么长,估计也没人这么用吧。