是否需要有关Function .__ proto__的JavaScript技术说明?

时间:2018-07-04 02:25:58

标签: javascript

console.log(Function instanceof Object) // true
console.log(Function.__proto__ === Object.prototype) // false
console.log(Function.__proto__ == Function.prototype) // true

当Function是Object的实例时,为什么在第(2.)行上为“ false”的技术解释是什么?

1 个答案:

答案 0 :(得分:2)

__proto__引用原型链中的立即原型对象。从#3中可以看到,Function的原型是Function.prototype。尽管函数对象的一种,但是Object.prototype在原型链上要高 -它们不相同,因此(Function.__proto__ === Object.prototype)为假:

console.log(Function.__proto__.__proto__ === Object.prototype);

// Same as:

console.log(Function.prototype.__proto__ === Object.prototype);

如您所见,

Function扩展了Object

此外,您可能会注意到,使用getPrototypeOf可能更可取。来自MDN:

  

警告:尽管大多数浏览器现在都支持Object.prototype。 proto ,但ECMAScript 2015规范中仅将它的存在和确切行为标准化为一项传统功能,以确保与Web浏览器的兼容性。为了获得更好的支持,建议仅使用Object.getPrototypeOf()。