在JS中,Function instanceof Object将会返回true,这是为何?在Object的
prototype中似乎找不到Function.__proto__或Function.constructor.prototype的
对象啊
instanceof实现原理如下:
function instance_of(L, R) {//L 表示左表达式,R 表示右表达式
var O = R.prototype;// 取 R 的显示原型
L = L.__proto__;// 取 L 的隐式原型
while (true) {
if (L === null)
return false;
if (O === L)// 这里重点:当 O 严格等于 L 时,返回 true
return true;
L = L.__proto__;
}
}
而
Function.prototype.===Function.__proto__;
Function.prototype.__proto__===Object.prototype
由此判断Function为Object的一个实例将会为true
Object是所有对象类的基类,所以要判断数据类型必须要用排除法:既判断是否是Array, Function或其他类型
定义一个函数:
function fff(){}
通过火狐调试器获得的信息: