构造函数原型习题详解

53 阅读2分钟

原型练习题

    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.prototypePerson构造函数的原型,本质上就是一个对象而已

在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.prototypeFunction构造函数的原型,本质上就是一个对象而已

在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