JS面向对象基础
本文最后更新于:1 年前
OOP(面向对象编程)基础
语言的分类:
1、面向机器:汇编语言
2、面向过程:C语言
3、面向对象:java、C++、PHP等
面向过程与面向对象区别:
面向过程:专注于如何去解决一个问题的过程,编程特点是用一个个函数去实现过程操作,没有类与对象的概念
面向对象:专注于由哪一个对象实体去解决这个问题,编程特点是出现了类,由类生成对象
面向对象的三大特征:继承、封装、多态
类和对象的关系
类:
一群有相同特征(属性)和行为(方法)的集合 ;
对象 :
从类中,拿出的具有确定属性值和方法(行为)的个体
类和对象的关系:
类是对象的抽象化,对象是类的具体化;类是抽象的,对象是具体的
通俗来说: 类是一个抽象概念,表示具有相同属性和行为的集合,但是类仅仅表明这类群体具有相同的属性,但是没有具体的属性值,而对象是对类的属性进行具体赋值后,而得到的一个具体的个体
使用类来创建对象
1、创建一个类(构造函数),类名必须每个单词的首字母大写
1 |
|
2、同过类实例化出一个新的对象:(实例化对象时会执行构造函数)var obj = new 类名(属性1value);
原构造函数中this指向新创建的obj对象
obj.方法(); 调用方法
obj.属性(); 调用属性
两个重要的属性:
1、constructor:
返回当前对象的构造函数,(只有对象才有,返回的是构造函数-类)zhangsan.constructor == Person true
对象的constructor,位于__proto__原型对象上
2、instanceof
用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。object(要检测的对象).constructor(某个构造函数)
广义对象和狭义对象
狭义对象:只有属性、方法,除此之外没有任何东西var obj = {}; var obj = new Object();
广义对象:除了用字面量声明的基本数据类型之外,换句话说,能够添加属性与方法的变量,就是对象;var s = "1";
不是对象, var s = new String("1");
是对象
【成员属性与成员方法】
在构造函数中,通过”this.属性”声明,或者实例化出对象后,通过”对象.属性”追加的,都属于成员属性或成员方法,成员属性/方法,是属于实例化出的这个对象,通过”对象.属性”调用
【静态属性与静态方法】
通过”类名.属性名”,”类名.方法名”声明的变量,称为静态属性、静态方法,也叫类属性、类方法
成员属性是属于实例化出的对象的,会出现在新对象的属性上,类属性是属于构造函数自己的,不会出现在新对象属性上
JS中的对象
JS提供的内置对象有 array、boolean、number、string、date、math、regexp 。通常我们认为JavaScript的对象是键值对的容器。
虽然JavaScript 是面向对象的语言,但 JavaScript 不使用类。在 JavaScript 中,不会创建类,也不会通过类来创建对象(就像在其他面向对象的语言中那样)。
JavaScript 基于 prototype,而不是基于类的。
JS创建新对象有两种不同的方法:
- 定义并创建对象的实例
- 使用函数来定义对象,然后创建新的对象实例
直接创建对象实例
有两种方式直接创建对象,一种是使用字符通过键值对的方式创建:
1 |
|
另一种是先创建对象,然后再添加属性和属性值:
1 |
|
通过函数构造对象
1 |
|
对象属性和方法的访问
对象属性访问方式有两种,一种是对象名.属性名,还有一种是对象名[属性名],例:person.name;
,person["name"];
JS对象的循环遍历
可以使用 for…in 语句循环遍历对象的属性。
1 |
|
JS对象属性的删除
对象无需手动删除,JS提供了一种主动释放对象内存的方法(即对象无用后,自动删除)
删除对象的属性:delete 对象名.属性名
对象是引用数据类型
也就是说,当new出一个对象时,这个obj变量存储的实际上是对象的地址,在对象赋值时,赋的也是地址。
1 |
|
引用数据类型,赋值时传递的是引用(地址);基本数据类型,赋值时传递的是数据(值)
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!