面向对象
1.面向对象和面向过程的区别
有一天你想吃鱼香肉丝了,怎么办呢?你有两个选择
1、自己买材料,肉,鱼香肉丝调料,蒜苔,胡萝卜等等然后切菜切肉,开炒,盛到盘子里。
2、去饭店,张开嘴:老板!来一份鱼香肉丝!
看出来区别了吗?这就是
1是面向过程,2是面向对象。
区别:
- 面向过程就是分析出解决问题所需要的步骤,然后用函数实现这些步骤,依次调用这些函数,在需要使用的时候;
- 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为
2.面向对象的特点
1、封装
隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。
2、继承
提高代码复用性;继承是多态的前提。
3、多态
父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。提高了程序的拓展性。
工厂模式
实际上就是函数的封装
例:封装一个产生对象的函数
function createPerson(name, age) {
let obj = {};
obj.name = name;
obj.age = age;
obj.say = function() {
console.log(`我叫${name},今年${age}岁`);
}
return obj;
}
console.log(createPerson("张三", 18));
构造函数
也叫内置工厂模式
构造函数和普通函数没有明显的区别
普通函数的this指向window
function createPerson(name, age) {
this.name = name;
this.age = age;
this.say = function() {
console.log(`我叫${name},今年${age}岁`);
}
console.log(this);//window
}
createPerson("张三", 18);
在 上面例子的基础上new出来的新的实例对象,这时候它就成了构造函数
2.构造函数的this指向实例对象
function createPerson(name, age) {
this.name = name;
this.age = age;
this.say = function() {
console.log(`我叫${name},今年${age}岁`);
}
console.log(this); //指向实例化对象p
}
let p = new createPerson("张三", 18);
因此为了做区分,一般把构造函数首字母大写表示function CreatePerson(name, age) {}
创建对象的三种方式
1.直接创建let obj={}
;
2.构造函数创建:let obj=new Object();
3.new一个class:class A{};let obj=new A{}