以spiderMonkey作为js引擎的火狐浏览器和V8引擎的chrome浏览器,都支持通过非标准__proto__
属性去访问原型。
实例对象的__proto__
属性确实是个对象,但是构造函数的__proto__
却是个空函数。
那么,原型也是个对象,如何理解呢?
var a = {};
typeof a.__proto__; // object
a.__proto__=== Object.prototype; // true
var f = function() {};
f.__proto__ === Function.prototype; // true
typeof Function.prototype; // function
Function.prototype === Object.__proto__; // true
ECMA引入了标准对象原型访问器Object.getPrototypeOf(object),那么用这个方法也可以测试。
对一个构造函数var F=function(){}而言,Object.getPrototypeOf(F)返回的是一个空函数,也就是函数类型。
那么我是否可以理解,“原型”也是对象,这里的“原型”指的仅仅是实例对象的“原型”,而非构造函数的“原型”?
javascript 中的两种值类型:原始值(primitive)和对象(object)
原始值包括:
所有其它的值都是对象(object)
具体细节可查看我翻译的这篇文章:JavaScript 并非所有的东西都是对象
另:javascript 中没有「构造函数」一说。
你提到的:
函数的类型是 object,所以,空函数也是对象。