- 只有函数有原型,函数的原型(prototype)属性是一个对象。
- 因为函数还是一个对象所以函数还有隐式原型(__proto__)。
- 函数的隐式原型指向 Function 的 显示原型。
即 function a (x,y){}; a.__proto__ -> function.prototype;
why: 因为function a a 函数相当于 是 var a = new Function(x,y) - Function 也是一个构造函数也是一个函数对象。所以它的隐式原型指向它自己;
即: Function.__proto__ -> Function.prototype;
why: 因为函数是 Function 构造函数的实例。Function 也是 Function 的实例
即function 是它本身的实例所以 它的隐式原型指向它的显示原型 - 对象只有隐式原型没有显示原型,
- 对象的显示原型为undefined 如: var a = {}; a.prototype == undefined;
- 对象的隐式原型指向构造函数的显示原型;
即: 上面a.__proto__ -> Object.prototype;
why: 因为var a ={}; 即 var a = new Object(); - 这个时候就会有人问Object.有没有__proto__。答案肯有啊。因为它也是函数,函数的隐式原型都是指向 Function.prototype的 即:object.__proto__ == Function.prototype;
- 原型因为是一个对象,它也具有隐式原型。它的隐式原型指向object.prototype。
- 顺便提示一下class 定义的类实际就是一个构造函数。Class 相当于是 es5 构造函数的语法糖。所以class.__proto__ 也是指向Function.prototype。它的原型的prototype.__proto 也是指向Object.prototype;
注释: 有理解错误地方帮忙支持,如果看完对你有帮忙请点赞