面向过程编程思想: 只关心数学逻辑
面向对象编程思想: 这种将生活逻辑映射到我们程序中编程思想叫做面向对象编程思想
- 找出实体
- 分析实体和属性功能
- 让实体之间相互作用
例:有一辆车60km/h,跑在一条1000km的路上,多久可以跑完?
/*
var hours = 1000 / 60
console.log(hours)
*/
var car = {
speed: 60
run: function(road){
road.length / this.speed
}
}
var road = {
length: 1000
}
var hours = car.run(road)
console.log(hours)
语法
类 : 一类具有相同食物特征的概念
对象: 具体的某一实例,唯一的某一个个体
类 对象
电脑 你面前的那台
数据结构
基本数据类型(只能存储单个的值) => 数组(处理批量的数据) => 对象(既能够存储数据,又能够存储函数)
工厂模式
1. 原料
1. 加工
1. 出厂
【注】凡是满足上述三个步骤创建对象的函数,我们把它叫做工厂方法
如果,我们某一个函数,使用new运算符去调用
- 当前函数中的this只想新创建的对象
- 自动去完成1、原料和3、出厂操作
这种通过new调用函数,我们把它叫做构造函数,构造函数可以创建对象
【注】构造函数一般情况下首字母大写
function createPerson(name,sex){
//原料
var obj = new Object()
//加工
obj.name = 'name',
obj.sex = 'sex',
obj.showName = function(){
console.log(`我的名字叫${this.name}`)
}
obj.showSex = function(){
console.log(`我的性别是${this.sex}`)
}
//出厂
return obj
}
var p1 = createPerson('blue','男')
p1.showName()
p1.showSex()
var p2 = createPerson('red','女')
p2.showName()
p2.showSex()
console.log(p1.showName === p2.showName)//fasle
/*
1. 没有new
2. 每一个新创建出来的对象都独有一套函数
*/
prototype 原型对象
用在构造函数上,我们可以给构造函数的原型prototype,添加方法
- 如果我们将方法添加到构造函数的原型prototype 对象上
- 构造函数构造出来的对象共享原型上所有方法 ```javascript var arr1 = [10,20,30,40,50] var arr2 = [1,2,3,4,5]
Array.prototype.sum = function() { var res = 0; for (var i = 0; i < this.length; i++){ res += this[i] } return res }
console.log(arr1.sum()) console.log(arr2.sum()) console.log(arr1.sum === arr2.sum) // true
```javascript
function Person(name,sex){
this.name = name
this.sex = sex
}
Person.prototype.showName = function(){
console.log(`我的名字是${this.name}`)
}
Person.prototype.showSex = function(){
console.log(`我的性别是${this.sex}`)
}
var p1 = new Person ('blue','男')
p1.showName()
p1.showSex()
var p2 = new Person('red','女')
p2.showName()
p2.showSex()
console.log(p1.showName === p2.showName)//fasle
面向对象的语法
面向对象,继承、封装(封装构造函数)、多态