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继承机制的设计思想。

  • 相关阅读:
    kubernetes部署Ingress Controller创建证书
    污点和容忍度
    Kubernetes部署coredns
    python中私有属性和私有方法
    类的约束
    reactjs 入门
    angularjs ngTable -Custom filter template-calendar
    sql 中条件in参数问题
    详解 nginx location ~ .*.(js|css)?$ 什么意思?
    CentOS 7.2.1511编译安装Nginx1.10.1+MySQL5.7.14+PHP7.0.11
  • 原文地址:https://www.cnblogs.com/lieaiwen/p/10209855.html
Copyright © 2011-2022 走看看