day18面向对象

概述:面向对象是一种编程思想(oop),是对面向过程的一个抽取和简化。主要是以类构建对象,来存储对应的行为及属性,将抽取的行为作为方法,对应的属性为属性,所有内容都可以抽取为一个对象(关键点:找有对应行为的对象完成这个行为)

面向对象和面向过程

面向过程以过程为核心

面向对象以对象为核心

对象的构建

调用new关键词 执行对应的构造函数来构建对象

通过类来构建对象(构造器)es6

class Person{
constructor(username){
this.name = username
}
}
var person = new Person('jack')

通过构造函数来构建(es3)

//以构造函数构建 首字母大写
function Dog(name){
this.name = name //函数里面的this指向它的调用者 在new的时候指向对应的对象实例
}
var dog = new Dog('旺财')

这两种方式核心是通过构造函数(构造对象的函数)来构建

通过构造函数进行的操作

自动构建对象

手动设置属性

自动返回对象

通过工厂模式来构建对象

手动构建对象

手动设置属性

手动返回对象

//以工厂模式来构建
//工厂里面要传入对应的属性 返回对应的对象(不能区分类型)
function factory(name){
//Object是最大的对象 手动构建对象
var obj = new Object()
//手动给obj设置相关的属性
obj.name = name
//手动返回对应的对象
return obj
}
//调用
var obj = factory('旺财')
var obj1 = factory('jack')
console.log(obj,obj1);

工厂模式的特性
可以构建所有的对象
在构建对象的时候会忽略细节
构建出来的对象都是Object(instanceof全部指向Object)

console.log(obj instanceof Object);//true
console.log(obj1 instanceof Object);//true

面向对象的三大属性

封装(行为抽取为方法 属性抽取为属性)

继承(子类继承父类的属性和方法)

多态(继承关系的体现 重写(子类重写父类的方法)重载(在一个类有两个同名的方法js不允许 没用重载))

class Person{
constructor(){
// var sex = '男'
this.name = 'jack'
this.say = ()=>{
console.log('哈哈哈哈');
}
}
}
class Son extends Person{
constructor(age){
super() //调用Person的constructor
this.age = age
//重写
this.say = ()=>{
console.log('嘻嘻嘻嘻');
}
}
}
var son = new Son()
console.log(son);//name say age
son.say() //嘻嘻嘻嘻

 

posted @ 2022-10-24 19:48  xiaomingff  阅读(20)  评论(0)    收藏  举报