zoukankan      html  css  js  c++  java
  • 原型和继承 constructor、prototype、__proto__

    之前大神说,学习 JS 遇到原型和继承果断的跳过吧,没有它们,你也可以把 JS 玩的很 6

    突然入了坑,简单的记录一下

    构造函数

    实例对象

      用来初始化新创建的对象的函数是构造函数。

      在 C++ 语言中,类 有一个构造函数, 它与类同名且没有返回值的(可以不写,也可重载多个);

      在 JS  中, 没有 类 的概念,原型对象 姑且等同于 类 ,原型对象有 constructor 属性,该属性指向原型对象的构造函数。 JS 中默认存在的一些原型对象,也存在它们的构造函数,比如 Object() Array() Function() String()  Number()  Boolean() 等。

      通过构造函数可以实例化多个对象,它们称为实例对象,且他们拥有相同的原型对象。 可以通过原型对象来实现 继承。   

    prototype 

      显式原型

      构造函数有 prototype 属性, 指向实例对象的原型对象。 同一构造函数实例化的不同实例对象指向相同的原型对象。 在 prototype 下定义的方法 有点像 C++ 里的在 类  

    constructor 

      原型对象有 constructor 属性,指向该原型对象的构造函数。

      由于实例继承自原型对象,所以也拥有 constructor 属性, 指向原型对象的构造函数。 

      一句话,他们(原型对象、实例)的(constructor)指向完全相同

      

    __proto__

      隐式原型。正是由于它才得以构成原型链。

      实例对象有 __protp__ 属性,指向该实例对象对应的原型对象。 也可以理解为 父级对象 吧

      构造函数也有 __proto__ 属性。constructor 下的 __proto__ 是指向 Function.prototype 的,说到底构造函数也是一个稍特殊的函数(比普通函数多一个 prototype)

      终极原型是 Object.prototype 。Object 没有 __proto__ 。

    举个栗子:

            constructor、prototype、__ptoto__ 

    (3)[1,2,3] 是一个长度为 3 的数组,也是一个实例对象

    1 这个实例对象对应的原型对象(__protp__)是 Array(0)

    2 这个原型对象有 constructor 属性,指向该原型对象的构造函数 f Array()    1、f  代表是个函数 ;2、Array()   构造函数。 实例对象因为继承也拥有 constructor 属性。  

    3 这个构造函数有 prototype 属性,指向实例对象对应的原型对象,也就是 Array(0) 

    4 综合 1 3 可得:实例对象对应的原型对象 === 实例对象对应的原型对象的构造函数的原型对象,hiahiahia.....  这么一来,在原型对象的 constructor 属性下的 prototype 属性下会看到无限的自我循环。 prototype 属性 指向的原型对象有 constructor 属性, constructor 属性指向的构造函数 有 prototype 属性, prototype 属性指向的原型对象有 constructor 属性......

    再举个栗子,以下输出皆 true :

    这么说吧:

    constructor 指向的是构造函数

    prototype 和 __protp__ 指向的都是原型对象。前者指向自己,后者指向父级。

    绕口令一般的..........

    希望不是误导..........

  • 相关阅读:
    java spring-mvc + maven + hibernate + mysql 注释
    c# log4net
    c# winform richtextbox 锁屏和滚屏
    socket 客户端
    c# winform插件
    c# 注册全局热键
    c# 请求api获得json数据
    java 把一个文件夹里图片复制到另一个文件夹里
    c# UpdateLayeredWindow异形窗口
    【哈希】身份证问题
  • 原文地址:https://www.cnblogs.com/yier0705/p/8203284.html
Copyright © 2011-2022 走看看