首页 > 其他分享 >对象原型 原型链 原型继承 constructor属性

对象原型 原型链 原型继承 constructor属性

时间:2022-11-29 19:59:23浏览次数:55  
标签:function console 属性 原型 log constructor prototype 构造函数

原型:       每个构造函数身上都有一个prototype原型   原型身上有一个对象       被称为原型对象 (构造函数的this和原型上的this都指向实例化对象)

<body>
    <script>
      function Star() {}
      Star.prototype.sing = function () {
        console.log("哈哈哈");
      };
      //  原型对象
      console.log(Star.prototype);

      const ldh = new Star();
      console.log(ldh);
      // __proto__
      // 所有的实例化对象都有__proto__属性指向构造函数的原型对象
      console.log(ldh.__proto__ === Star.prototype); // true
    </script>
  </body>
原型链:      (构造函数通过new实例化 每个实例化身上都有一个prototype这个原型)        每个原型对象身上都有一个 __proto__这个原型 而这个对象身上也有原型对象        这个对象身上有一个consturct属性 这个属性指向构造函数 ,        构造函数身上也有__proto__这个原型 这个原型身上也有原型对象 就这样一层层         形成链式结构被称为原型链
//   function Father() {
      //     this.sing = function () {
      //       console.log("我是父级");
      //     };
      //   }
      //     Object原型对象
      //     Object.prototype.sing = function () {
      //       console.log("我和我的祖国");
      //     };
      //     Father.prototype.sing = function () {
      //       console.log("青花瓷");
      //     };
      //   const zjl = new Father();
      //   zjl.sing(); //实例化后调用方法
      //   先自己原型上找到我是父级 =>青花瓷=>我和我的祖国

 //   console.log(Object.prototype); //construct属性一系列
      //   console.log(Object.prototype.__proto__); //null
       总结:访问原型: 访问原型上的的方法时 先访问自己的原型上的 
如果没有则向外层找 原型上也找不到就返回null
原型继承:         1.可以简单理解为 一个公共的原型方法 如果想要继承 就需要将原型对象的实例化对象                 (也可以理解为父级的实例化对象)给到自己的原型对象         2.再将construct重新指向自己的构造函数
        继承父元素 
      //   function Father(money, car, house) {
      //     this.money = money;
      //     this.car = car;
      //     this.house = house;
      //   }
      //   Father.prototype.hight = function () {
      //     // console.log("183");
      //   };

      //   let res = new Father("10000000", "保时捷711", "别墅"); //进行实例化
      //   console.log(res);
      //   res.hight();
      //   //  Son的构造函数
      //   function Son() {}
      //   let res1 = new Son();
      //   // 原型继承
      //   Son.prototype = new Father();
      //   console.log(Son.prototype); //{money: undefined, car: undefined, house: undefined}会被父级实例化对象覆盖
      //   new Son().hight(); //183
      //   //  把构造函数从新指向自己
      //   Son.prototype.constructor = Son;
      //   console.log(Son.prototype); //此时父级中的constructor属性上会 f son()这个构造函数(constructor用于判断原型上的属性上是否包含某个构造函数 多用于区分)
constructor属性 (construtor这个属性指向构造函数)  
<body>
    <script>
      // constructor  单词 构造函数
      function Person(name, age) {
        this.name = name;
        this.age = age;
      }
      Person.prototype.sing = function () {
        console.log("唱歌");
      };
      const lw = new Person("哄哄", 3);
      lw.sing();
      console.log(Person.prototype.constructor);
      //
      function Pig(one, two) {
        this.one = one;
        this.two = two;
      }
      Pig.prototype.sing = function () {
        console.log("哼哼");
      };
      const zz = new Pig("闹闹", 7);
      zz.sing();
      console.log(Pig.prototype.constructor);
      console.log(Pig.prototype.constructor === Pig);
      // 如果有多个构造函数 打印它的原型 则分不出那个是自己的属性(Person.prototype)

      // 总结 所有的原型对象都有一个属性 constructor 这个属性指向构造函数 由此找到构造函数  可以进行区分
    </script>
  </body>

 

标签:function,console,属性,原型,log,constructor,prototype,构造函数
From: https://www.cnblogs.com/JAG2671169285/p/16936495.html

相关文章

  • python-面向对象- 实例方法,类方法,静态方法, 类属性
    名称定义方法权限调用方法实例方法第一个参数必须是示例,一般命名为self可以访问实例的属性和方法,也可以访问类的实例和方法一般通过示例调用,类也可以调用类方法......
  • 产品需求文档写作方法(二)原型设计+撰写设计
    三、原型设计(手绘原型,灰模原型,交互原型)3.1原型设计   上一篇文章我们通过思维导图将想法进行了结构化梳理,接下来我们就需要进行方案的可行性推演,验证产品功能是否......
  • 08天气案例-监视属性
    一、深度监视<htmllang="en"><head><metacharset="UTF-8"><title>深度监视</title><scripttype="text/javascript"src="../js/vue.js"></script></h......
  • CSS中的定位——position属性
    CSS定位指的是改变元素在页面中的位置。CSS定位机制:普通流:元素按照其在HTML中的位置顺序决定排布的过程(也就是我不对元素进行定位的默认排布)浮动绝对布局CSS定位包含的属性......
  • 常用css属性flex: 1详解
    flex:1实际代表的是三个属性的简写flex-grow是用来增大盒子的,比如,当父盒子的宽度大于子盒子的宽度,父盒子的剩余空间可以利用flex-grow来设置子盒子增大的占比flex-shrin......
  • PropertyPlaceholderConfigurer、PropertyOverrideConfigurer等对属性配置文件Propert
    Spring的PropertyResourceConfigurer是个抽象类,继承自PropertiesLoaderSupport,并实现了接口BeanFactoryPostProcessor。注意:它是个Bean工厂的后置处理器,而不是Bean的后置......
  • Solide Edge 2023 +TC14如何实现 BOM行 注释属性同步
    1.定义BOM行注释属性     2.配置首选项 SEEC_Property_Mapping_AsmOcc描述将SolidEdge定制事例属性名称与Teamcenter注释类型名称配对。定制事例属性名......
  • js原型和原型链
    目录原型和原型链原型原型链原型和原型链原型在理解之前,明白一个前提,js也是有类的,也可以定义方法和构造函数隐式原型:对象的_proto_属性(里面有类定义的方法,且这个属性每......
  • 遍历学生类的属性,易理解版
    这是输出类的代码1.创建一个学生类的集合对象ArrayList<学生类01>AA=newArrayList<>();2.创建一个可以录入键盘数据的对象ScannerBB=newScanner(System.i......
  • TypeScript属性的封装
    封装对象实质上就是属性和方法的容器,它的主要作用就是存储属性和方法,这就是所谓的封装默认情况下,对象的属性是可以任意的修改的,为了确保数据的安全性,在TS中可以对属......