console.log(Function instanceof Object) // true
console.log(Function.__proto__ === Object.prototype) // false
console.log(Function.__proto__ == Function.prototype) // true
当Function是Object的实例时,为什么在第(2.)行上为“ false”的技术解释是什么?
答案 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()。