前 言
随笔
整理一下,最近学的的一些东西,
1 面向对象编程OOP |
1.1语言的分类
面向机器:会变语言 面向过程:C语言 面向对象:C++ Java php 等
1.2面向过程与面向对象
面向过程:专注于如何去解决一个问题的过程。编程特点是用一个个函数去事件过程操作,没有类与对象的概念; 面向对象:专注于有哪一个对象实体去解决这个问题。编程特点是:出现了一个个的类,由类去生成对象。 [面向对象三大特征] 继承、封装、多态
2 类和对象的关系 |
2.1类
类:一群有相同特征(属性)和行为(方法)的集合。 eg: 人类 属性:身高、体重、年龄、 方法:吃饭、睡觉、敲代码2.2对象
对象:从类中,拿出的具有确定属性值和方法的个体;* eg:张三 属性:身高180 体重180 方法:说话---我叫张三2.3类和对象的关系
类是抽象的,对象时具体的。(类是对象的抽象化,对象时类的集体化) 通俗的来讲:类是一个抽象的概念,表示具有相同属性和行为的集合,但是类仅仅表明这类群体具有向东的属性名单是没有具体的属性值。 而对象是对类的属性进行具体赋值后,而得到的一个具体的个体,2.4使用类和对象的步骤
①创建一个类(构造函数)、 类名,必须要每个单词的首字母都大写 function 类名(属性一){ this.属性=属性一; this.方法=function(){} //this指向谁 , 即将调用当前构造函数的对象。 } ②通过类,实例化出一个新的对象;、 var obj = new 类名(属性-value); //构造函数this,指向新创建的obj对象; obj.方法();调用方法 obj.属性();调用属性2.5广义对象与狭义对象
狭义对象: 只有属性、方法,除此之外没有任何东西。var obj = {}; var obj = new Object();
广义对象: 除了用字面量声明的基本数据类型之外,万物皆对象。换句话说,能够添加属性与方法的变量,就是对象;
var s = "1"; 不是对象
var s = new String("1"); 就是对象
2.6类和对象的两个重要的属性
constructor: 返回当前对象的构造函数。(只有对象才有,返回的是构造函数-类) zhangsan.constructor == Person >>>对象的constructor,位于___proto___原型对象上(后续讲解)eg:
1 // ① 定义一个类(构造函数)
2 function Person(name,age,sex){
3 // 类的属性
4 this.name = name;
5 this.age = age;
6 this.sex = sex;
7
8 // 类的方法
9 this.say = function(){
10 alert("我叫"+this.name+";今年"+this.age+"岁;是一个"+this.sex+"生");
11 }
12 }
13
14 // 从类中,实例化出一个对象。并给对象的属性赋值
15 var zhangsan = new Person("张三",18,"男");
16 //zhangsan.say();
17
18 var lisi = new Person("李二狗",16,"男");
19 //lisi.say();
20
21 var wanger = new Person("王二麻子",14,"女");
22 //wanger.say();
23
24
25 console.log(zhangsan.constructor==Person);
26 console.log(lisi instanceof Person)
27 //console.log(Person.age);// Undefined
28
3 成员属性与成员方法;静态属性与静态方法;私有属性与私有方法 |
成员属性/方法,是属于实例化出的这个对象。
通过"对象.属性"调用
3.2静态属性与方法
1.通过"类名.属性名" ,"类名.方法名"声明的变量,成为静态属性、静态方法;也叫类属性、类方法; 类属性/类方法,是属于类的(属于构造函数的);通过"类名.属性"调用 2.成员属性是属于实例化出的对象的。会出现在新对象的属性上;
类属性是属于构造函数自己的。不会出现在新对象的属性上; 3.JS对象属性的删除:
① 对象无需手动删除,JS提供了一种主动释放对象内存的方法(即对象无用后,自动删除)
② 删除对象的属性:delete 对象名.属性名 4.对象是引用数据类型
也就是说,当new出一个对象时,这个obj变量存储的实际上是对象的地址,在对象赋值时,赋的也是地址。
function Person(){}
var zhangsan = new Person(); //zhangsan对象实际存的是地址
var lisi = zhangsan;//赋值时,实际是将zhangsan存的地址给了lisi
lisi.name = "李四"; //李四通过地址,修改了对象
consloe.log(zhangsan.name); //张三再通过地址打开对象,实际已经变了
引用数据类型,赋值时传递的是引用(地址)---快捷方式。
基本数据类型,赋值时传递的是数据(值)
3.3私有属性与私有方法
在构造函数中,通过var声明的属性,成为私有属性:
function Person(){var num = 1;}
私有属性的作用域,仅在当前函数有效。对外不公开,即通过对象/类都无法调用到。