zoukankan      html  css  js  c++  java
  • js的继承思想

    js的prototype属性

    定义和用法:

    prototype 属性使您有能力向对象(函数)添加属性和方法,因为函数也是对象。
    prototype是函数的的属性,本质是函数的原型对象。

    是的,就是因为函数调用prototype的时候是和对象调用属性的时候一样的,我们才把prototype说成是函数的一个属性,而函数的这个属性其实是一个对象

      特别指出:

               Array.prototype是一个数组

           String.prototype是一个字符串

           Object.prototype是一个对象

    js设计了继承,但是不想让气根面向对象语言一样正式,就引用他们的new关键字,

    并且js没有类这个概念所有就在new后面跟的是构造函数啦!

    于是function dog(name){

      this.name = name; 

      this.color = "黑狗" 

    }

    注意:构造函数中的这个this关键字,它就代表了新创建的实例对象。

    let a = new dog('大毛');

    let b = new dog('小黄')

    这个带来带来了一个缺点就是没办法共享属性,

    a.color="白色"

    console.log(b.color)//黑狗

    于是就引入了prototype对象,所有的实例对象需要共享的属性和方法,都在在了它里面,不需要共享的放在了构造函数里面。

    实例对象一旦创建,将自动引用prototype对象的属性和方法,也就是说,实例对象的属性和方法,

    分成两种,一种是本地的,一种是引用的。

    还以上面的demo为例

    dog.prototype = {species:'犬科'}

    所以console.log(a.species)

      console.log(b.species)//犬科

    species放在prototype对象里面,是两个实例共享的,只要修改prototype对象,就会同时影响两个实例对象

    a.species = "科";
    console.log(a.species)//“科”
    console.log(b.species);//“犬科”

    dog.prototype.species = "猫科"

    console.log(a.species)// “科”

    console.log(b.species)//“猫科”


    总结
    由于所有的实例对象共享同一prototype对象,那么从外界看其阿里,prototype对象就好像
    是实例对象的原型,而实例对象则好像“继承”了prototype对象一样。

    这就是javascript继承机制的设计思想。

  • 相关阅读:
    编译安装 openmcu
    spring AOP
    spring 依赖注入
    maven项目无法新增java test目录的问题
    java 路径的问题
    使用httpClient模拟http请求
    java String 内存模型
    javaweb项目中的过滤器的使用
    javaweb+spring 项目集成异常的处理
    javaweb 项目的异常处理
  • 原文地址:https://www.cnblogs.com/lieaiwen/p/10209855.html
Copyright © 2011-2022 走看看