js原型及原型链

                                                      js原型与原型链

  js的原型分为两种,显示原型( prototype )跟隐式原型(__proto__);

  显示原型 :  每个函数在声明时,都会自动创建一个显示原型,默认指向一个空Object对象(即原型对象);

  隐式原型 :  每个实例对象在创建时,也会自动创建一个隐式原型(__proto__),实例对象隐式原型的值 == 构造函数显示原型的值

// 定义一个构造函数
function Pr() {
    // 在函数创建时,会自动创建一个prototype   相当于在函数内添加一条语句  this.prototype = {}:

}

// 创建实例
var p = new Pr; //  创建实例时,自动创建 __proto__   即   this.__proto__==Pr.prototype;

 

 原型链的属性问题

  查找 :  当在自身中没有找到该属性或者方法,则会自动沿着隐式原型链查找 (原型链也称为隐式原型链),直到原型链的尽头(即Object的原型对象),找到则返回,找不到返回undefined

  设置 :  设置属性时,不会牵扯到原型链,当自身中没有该属性,则直接添加此属性并设置值

  方法一般定义在原型链中,属性则通过构造函数定义在对象自身

 

 探索instanceof是如何判断的

  表达式:  A instanceof B

  如果B函数的显示原型对象在A对象的原型链上(隐式原型),则返回true,否则返回false

 

  补充

    1. 函数的原型对象,默认是一个空的Object对象,但它里面其实是有数据的,它也会有一个隐式原型,值是object的显示原型

      因为它也是一个实例对象,是通过new Object产生的,所有它的隐式原型的值==Object的显示原型

    2. 函数本身也是一个实例对象,因为它是通过new Function所产生的! 即函数也拥有隐式原型属性,值向Function的显示原型

    3.Function的显示原型与它自身的隐式原型相等,因为Function是通过new自身产生的实例

    4.Object的原型对象没有隐式原型对象!它的隐式原型的值是null. 所有object的原型对象是原型链的尽头

  

  初学js高级,对js原型链还不太熟悉,欢迎各位大佬补全纠正   2020-06-20

 

js原型及原型链

上一篇:滴滴2019年php高级研发工程师面试题总结


下一篇:Swagger2 Unable to infer base url. This is common