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