原型练习题
const fn = new Function('console.log(123)')
fn()
function Person(name, age) {
this.name = name
this.age = age
}
Person.prototype.sayHi = function () {
console.log('你好~~~')
}
const p1 = new Person('QF001', 18)
console.log(p1.__proto__ === Person.prototype) //true
console.log(Person.__proto__ === Function.prototype) //true
console.log(Person.prototype.__proto__ === Object.prototype) //true
console.log(Function.__proto__ === Function.prototype) //true
console.log(Function.prototype.__proto__ === Object.prototype) //true
console.log(Object.__proto__ === Function.prototype) //true
console.log(Object.prototype.__proto__) //null
1.p1
的 __proto__
指向谁
__proto__
指向自己构造函数的原型
所以相当于指向了 Person.prototype
p1.__proto__ === Person.prototype
2.Person
的 __proto__
指向谁
Person
是一个构造函数,构造函数本质上就是一个函数而已
在JS中,只要是一个函数,那么就属于构造函数Function
实例化对象
__proto__
指向自己构造函数的原型
所以相当于指向了 Function.prototype
Person.__proto__ === Function.prototype
3.Person.prototype
的 __proto__
指向谁
Person.prototype
是Person
构造函数的原型,本质上就是一个对象而已
在JS中,只要是一个对象,那么就属于构造函数Object
的实例化对象
__proto__
指向自己构造函数的原型
所以相当于指向了 Object.prototype
Person.prototype.__proto__ === Object.prototype
4.Function
的 __proto__
指向谁
Function
是一个构造函数,构造函数本质上就是一个函数而已
在JS中,只要是一个函数,那么就属于构造函数Function
实例化对象
__proto__
指向自己构造函数的原型
所以相当于指向了 Function.prototype
Function.__proto__ === Function.prototype
5.Function.prototype
的 __proto__
指向谁
Function.prototype
是 Function
构造函数的原型,本质上就是一个对象而已
在JS中,只要是一个对象,那么就属于构造函数Object的实例化对象
__proto__
指向自己构造函数的原型
所以相当于指向了 Object.prototype
Function.prototype.__proto__ === Object.prototype
6.Object
的 __proto__
指向谁
Object
是一个构造函数,构造函数本质上就是一个函数而已
在JS中,只要是一个函数,那么就属于构造函数 Function
实例化对象
__proto__
指向自己构造函数的原型
所以相当于指向了 Function.prototype
Object.__proto__ === Function.prototype
7.Object.prototype
的 __proto__
指向谁
因为 Object.prototype
是JS 的顶层对象,再往上就没有了,所以这个值为null
console.log(Object.prototype.__proto__) //null