面向对象编程思想
Posted cnblogxc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象编程思想相关的知识,希望对你有一定的参考价值。
面向对象的基本思想
1、什么是面向对象
“面向对象的方法主要是把事物给对象化,包括其属性和行为。
是一种编程思想,编程思路,代码的书写格式
2、构造函数的使用
创建对象的方法,有两种
字面量 const obj = {}
构造函数 const obj = new Object()
这个构造函数,就是javascript程序定义好的构造函数,我们直接使用就可以了
所谓的构造函数,实际也是一种函数
构造函数和普通函数的区别
1、构造函数一定要和 关键词 new 一起使用
new 关键词具有特殊的功能,
会自动的给 构造函数中 定义一个对象,并且返回这个对象
我们只要对这个对象设定属性,设定方法就可以了
2、构造函数为了和其他函数区别
语法规范规定,构造函数,函数名称,第一个字母必须大写,使用大驼峰命名法
3、构造函数,给对象定义属性和方法的语法,与一般函数不同
3、自定义构造函数
注意:1、函数名称要使用大驼峰命名法
2、自定义构造函数中,不要定义对象,和 定义return
new 关键词会执行,如果定义了,会产生冲突
总结
new 的作用
1、在构造函数中,自行创建一个对象,并且返回这个对象
2、因为new 关键词,创建了对象,此时,构造函数中的this,才会指向这个对象
也就是将来生成的实例化对象
3、所有的构造函数中,this的指向,都是将来通过这个构造函数生成的实例化对象
4、prototype是什么?
prototype 是每个函数本身就具有的一个特殊的属性
可以在这个特殊的属性中,存储 数据和函数
5、proto是什么
JavaScript中,每一个对象,都有一个 __proto__
实例化对象的 __proto__ 就是指向的 构造函数中, prototype 这个属性
通过构造函数,生成的实例化对象,这个实例化对象, __proto__ 存储的地址
就是生成这个实例化对象的构造函数的 prototype 的地址
实例化对象的 __proto__ 实际上 就是指向 构造函数的 prototype
总结
函数有一个 属性 叫 prototype
其中可以定义,存储, 属性属性值 函数名称函数等等数据
定义在 prototype 中的内容 就是 函数自己本身的数据
对象有一个 属性 叫 __proto__
构造函数,在生成实例化对象时,会将自己 prototype 这个空间的地址
赋值给 实例化对象 的 __proto__ 来存储
实际上 构造函数的 prototype 和 生成的实例化对象的 __proto__ 指向的是同一个 存储空间
可以相互调用数据
5、 原型对象、原型属性、原型链
(1)、原型对象
每一个函数,天生都有一个 prototype 属性,称为原型对象
是一个专门用来存储数据,函数等内容的空间
(2)、原型属性
每一个对象,天生都有一个 __proto__ 属性,称为原型属性
实例化对象的原型属性,指向的创建实例化对象的构造函数的 prototype
函数,数组,等,JavaScript中的数据类型
实际存储的形式都是一个对象,都会有 __proto__ 属性
在JavaScript中,可以用对象的形式存储任何数据类型
(3)、原型链
所谓的原型链,就是所有相互关联的变量,使用 __proto__ 属性串联起来
调用数据数据时,会通过 __proto__ 将所有相互关联的 变量 串联
只要有一个变量中 有相应的属性,就会调用成功
6、面向对象编程的优点
优点与函数的优点类似
高内聚 低耦合
高内聚 : 将所有需要的程序,都定义封装在对象内
对象中存储所有需要的属性,所有需要的方法
低耦合 : 尽量减少特殊程序的执行
7、面向对象的基本思想
基本思路就是,创建一个对象,给这个对象,添加上属性和属性值,还有函数等方法
之后通过操作这个对象,来完成需要的效果
先通过一个函数的方法,来创建对象
function createObj(){
// 创建对象
const obj = {};
// 给对象添加属性和属性值
obj.name = ‘张三‘;
obj.age = 18;
obj.addr = ‘北京‘;
obj.sex = ‘男‘;
// 给对象添加方法
obj.funNameAge = function(){
console.log(this.name, this.age);
}
obj.funNameAddr = function(){
console.log(this.name, this.addr);
}
obj.funSexAge = function(){
console.log(this.sex, this.age);
}
obj.funAll = function(){
console.log(this.name, this.age,this.sex,this.addr);
}
// 返回这个创建好的对象
return obj;
}
// 调用函数,函数创建对象,并且作为返回值
// 变量中存储的就是函数创建的对象
const obj = createObj();
// 可以通过调用obj中存储的对方的方法,来实现功能
obj.funAll(); // 执行结果 张三 18 男 北京
总结:
1、基本概念
所谓的面向对象编程,是一种编程思想和书写方式方法
简单理解:
之前是将程序,封装在函数内,设定参数和返回值
现在是将程序,封装在对象内,设定对象的属性和方法
2、构造函数和实例化对象
构造函数:就是专门定义生成对象的函数
必须和关键词 new 配合使用
实例化对象:本质上就是一个对象,只不过是通过构造函数生成的
3、原型链
原型对象:
每一个 函数 都有一个 prototype
本质上一个专门存储 数据 和 方法(函数) 的空间
原型属性:
每一个 对象 都有一个 __proto__
实例化对象的 __proto__ 指向的 就是 生成这个实例化对象的构造函数的 prototype
原型链:
通过 __proto__ 将相互关联的数据,串联起来,可以相互访问数据的功能,就称为原型链
在JavaScript中任意一个数据类型,都可以看做是对象,都有 __proto__
举例:
定义 构造函数时, 将 实例化对象的方法,定义在构造函数的 prototype 中
生成 实例化对象 时 对象本身只有定义在 构造函数中的属性
没有定义在 prototype 中的方法
在 执行 实例化对象 时, 要调用方法,是通过原型链 也就是 通过 __proto__
找到 构造函数 的 prototype 空间 并且调用其中 存储的方法
4、构造函数
构造函数为了和普通函数区别,一般是将所有函数名称单词是的首字母大写
不大写也能执行,但是不符合语法按规范
定义构造函数:
在函数内,定义实例化对象的方法,通过的是this来指定定义实例化对象的属性
this.属性 = 属性值
在 prototype 中 定义 实例化对象的方法
构造函数.prototype.函数方法名 = function(){}
使用,调用构造函数,必须和 new 关键词一起使用
逆战班
以上是关于面向对象编程思想的主要内容,如果未能解决你的问题,请参考以下文章