面向对象(js)

java是纯面向对象语言

一,目标:

1:理解面向对象思想,掌握函数原型对象

2:运用面向对象封装确认框对话框功能

二,编程思想

1,面向过程介绍

概念:分析出解决问题所需要的步骤,然后用函数把这些步骤一步步实现,使用时候再一个个依次

调用

优点:性能比面向对象高,适合跟硬件联系很紧密的东西,单片机就采用的面向过程编程

缺点:没有面向对象易维护,易复用,易扩展

2,面向对象介绍

概念:把事务分解成一个个对象,然后由对象之间分工合作

优点:灵活,代码可复用,容易维护和开发

缺点:性能比面向过程低

特性:封装性,继承性,多态性

三,构造函数

1,js面向对象进行封装

  • js通过构造函数实现封装
  • 同样是将变量和函数组合到了一起并能通过this实现数据共享,不同的是借助构造函数创建出来的实例对象之间彼此不影响

2,构造函数创建对象实例

    function Star(uname,age) {
      this.uname=uname
      this.age=age //公共属性进行封装
      this.sing = function() {
        console.log('唱歌')  //公共方法进行封装
      }
    }
    const ldh = new Star('刘德华',55)
    const zxy =new Star('张学友',58)
    //执行过程 :1,new 立马创建空对象
    //2,this指向这个空对象,构造函数里的this指向实例对象,它不一定指向单独一个对象,它指向每一个实例对象,因此,this就是实例对象
   //3,执行理论代码,这就相当于指向刘德华的uname,添加了一个属性,最后return将属性接过来

两个实例对象的sing属性是一样的,但是当打印console.log(ldh.sing===zxy.sing) 时,却是False,因为构造函数创建实例对象存在内存浪费问题。明明两个内容都是一样的,可是却是开辟了两个不同的空间。

浪费内存主要是储存复杂数据类型的时候,创建一个对象开一个内存,明明代码一模一样,却要反复开内存来存储,浪费内存

四,原型

解决构造函数里边浪费内存的问题

概念:利用原型对象实现方法共享

  • 构造函数通过原型分配的函数是所有对象所共享的
  • js中规定,每个构造函数都有一个prototype属性,指向另一个对象,所以我们也称为原型对象
  • 这个对象可以挂载函数,对象实例化不会多次创建原型上函数,节约内存
  • 可以把不变的方法,直接定义在prototype对象上,这样所有对象实例就可以共享这些方法
  • 构造函数和原型对象中this都指向实例化的对象
Star.prototype //prototype就是一个原型。它是属于构造函数的一个属性
console.dir(Star.prototype) //dir是打印对象,打印出来就是对象,说明prototype是对象

Star.prototype.sing = function() {
  console.log('唱歌')
}

ldh.sing() //调用
zxy.sing() //调用
console.log(ldh.sing === zxy.sing)
//所以不管实例化多少个对象,都只调用原型挂载的那个方法
//公共属性写到构造函数里边
//公共方法写到原型对象身上

注意:无论是构造函数还是原型对象,两个里边的this指向的都是实例对象ldh

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值