03_原型链

<body>
<!--
1. 原型链(图解)
  * 访问一个对象的属性时,
    * 自身属性中查找,找到返回
    * 如果没有, 再沿__proto__这条链向上查找, 找到返回
    * 如果最终没找到, 返回undefined
  * 别名: 隐式原型链
  * 作用: 查找对象的属性(方法)
2. 构造函数/原型/实体对象的关系(图解)
3. 构造函数/原型/实体对象的关系2(图解)
-->
<script type="text/javascript">
  // console.log(Object)
  //console.log(Object.prototype)
  console.log(Object.prototype.__proto__)
  function Fn() {
    this.test1 = function () {
      console.log('test1()')
    }
  }
  console.log(Fn.prototype)
  Fn.prototype.test2 = function () {
    console.log('test2()')
  }

  var fn = new Fn()

  fn.test1()
  fn.test2()
  console.log(fn.toString())
  console.log(fn.test3)
  // fn.test3()


  /*
  1. 函数的显示原型指向的对象默认是空Object实例对象(但Object不满足)
   */
  console.log(Fn.prototype instanceof Object) // true
  console.log(Object.prototype instanceof Object) // false
  console.log(Function.prototype instanceof Object) // true
  /*
  2. 所有函数都是Function的实例(包含Function)
  */
  console.log(Function.__proto__===Function.prototype)
  /*
  3. Object的原型对象是原型链尽头
   */
  console.log(Object.prototype.__proto__) // null

</script>
</body>

原型链用来查找值,不是用来赋值的,查找不到就是undefined,查找不到变量会报错

A instanceof B

一个对象的原型对象很可能有多个 , A很可能Instanceof很多个,A原型链的顶部是Object.prototype,__proto__

函数本质上也是实例对象,所以也是有隐式原型

所有对象(实例对象)的隐式原型指向Object的显示原型,所有我们定义的对象,它的原型对象都是Object的实例,有个例外,就是Object自己

 

 

 

 

posted @ 2019-11-08 14:21  燕子fly  阅读(106)  评论(0编辑  收藏  举报