zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    五:系统及数据库
    四:WEB源码扩展
    三:搭建安全拓展
    二:数据包扩展
    一:基础入门-概念名词
    LeetCode 11. Container With Most Water
    LeetCode 263. Ugly Number
    LeetCode 10. Regular Expression Matching
    LeetCode 58. Length of Last Word
    LeetCode 53. Maximum Subarray
  • 原文地址:https://www.cnblogs.com/buwenxin/p/13170252.html
Copyright © 2011-2022 走看看