捋一下Function.prototype的和它的实例,以及和Object的关系:
首先,Function.prototype就是它的实例的原型,也就是说,是各个函数的原型。包含了函数的通用方法,如apply、bind等。
function Person() {
}
let person = new Person();
console.log(Person.__proto__ == Function.prototype) // true
其次,Function.prototype和Object也有一些微妙的关系。
只要记住:
- Function.prototype 可以看作是一个实例对象,而且由Object构造;
- Object 可以看作一个函数,由Function构造;
- Function 可以看作一个实例对象,由Function构造。
// Function.prototype 可以看作是一个实例对象,而且由Object构造;
console.log(Function.prototype.__proto__ == Object.prototype)
// Object 可以看作一个函数,由Function构造;
console.log(Object.__proto__ == Function.prototype) // true
// 而Function呢,作为一个实例对象,它又是由谁构造的呢?Object?并不是,而是由Function本身构造。
console.log(Function.__proto__ == Object.prototype) // false
console.log(Function.__proto__ == Function.prototype) // true
知道了这几条规则,后面的就可以随意绕了。
比如
console.log(Function.__proto__.__proto__ == Object.prototype) // true