为什么原型链的终点是null,而不是Object.prototype? |
您所在的位置:网站首页 › 摸金校尉原型是什么 › 为什么原型链的终点是null,而不是Object.prototype? |
首先要明确一点,原型链是指对象的原型链,所以原型链上的所有节点都是对象,不能是字符串、数字、布尔值等原始类型。 另外,规范要求原型链必须是有限长度的(从任一节点出发,经过有限步骤后必须到达一个终点。显然也不能有环。) 那么,应该用什么对象作为终点呢?很显然应该用一个特殊的对象。 好吧,Object.prototype确实是个特殊对象,我们先假设用它做终点。那么考虑一下,当你取它的原型时应该怎么办?即 Object.prototype.__proto__;应该返回什么? 取一个对象的属性时,可能发生三种情况: 如果属性存在,那么返回属性的值。 如果属性不存在,那么返回undefined。 不管属性存在还是不存在,有可能抛异常。 我们已经假设Object.prototype是终点了,所以看起来不能是情况1。另外,抛出异常也不是好的设计,所以也不是情况3。那么情况2呢,它不存在原型属性,返回undefined怎么样?也不好,因为返回undefined一种解释是原型不存在,但是也相当于原型就是undefined。这样,在原型链上就会存在一个非对象的值。 所以,最佳选择就是null。一方面,你没法访问null的属性,所以起到了终止原型链的作用;另一方面,null在某种意义上也是一种对象,即空对象,因为null一开始就是为表示一个“空”的对象存在的。这样一来,就不会违反“原型链上只能有对象”的约定。 所以,“原型链的终点是null”虽然不是必须不可的,但是却是最合理的。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |