小技巧:4句话帮你记住Class 和 原型链

294 阅读1分钟

速记,速记,6句话帮你记住Class 和 原型链

class Animal {}
let dog = new Animal

类、类的实例、Function 都是 Object的实例

console.log(dog instanceof Animal) //true
console.log(Animal instanceof Function) //true
console.log(Function instanceof Object) //true
console.log(Animal instanceof Object) //true

实例.proto === 类.prototype

console.log(dog.__proto__ === Animal.prototype) //true
console.log(Animal.prototype.__proto__ === Object.prototype) //true
console.error(Animal.prototype.__proto__.__proto__ === Object.prototype.__proto__) //true

[类.prototype] 可以把它看作类的一个特殊实例,其构造函数指向类本身 即 [类.prototype.constructor === 类]

console.log(dog.__proto__.constructor) //Animal 
console.log(Animal.prototype.constructor) //Animal
console.log(Animal.prototype.__proto__.constructor) //ƒ Object() { [native code] }
console.log(Object.prototype.constructor) //ƒ Object() { [native code] } 
console.log(Animal.prototype.__proto__.constructor === Object.prototype.constructor) //true

原型尽头 Object.prototype.proto === null

console.log(dog.__proto__.constructor) //Animal 
console.log(Animal.prototype.constructor) //Animal
console.log(Animal.prototype.__proto__.constructor) //ƒ Object() { [native code] }
console.log(Object.prototype.constructor) //ƒ Object() { [native code] } 
console.log(Animal.prototype.__proto__.constructor === Object.prototype.constructor) //true