javaScript(肆)
作者:互联网
1. 面向对象
这是一种编程思想,需要多加练习才能掌握,有点只可意会不可言传的味道。
我的理解是面向对象就是无论要写什么程序,都可以通过封装一个抽象的集合,通过实例化这个抽象的集合来完成我们需要的工作。
打个比方,我们需要写一个制冷的程序。这时可以封装一个抽象的冰箱集合,构建这个抽象冰箱的时候给它一些属性和方法,其中就有制冷的方法,然后通过实例化这个抽象的冰箱集合,调用它制冷的方法来实现我们最初制冷的目的。
面向过程其实就是需要什么就直接写什么,还是比如我们需要一个制冷的程序,就需要一步一步的写通电,电能使蒸发器工作,蒸发器使制冷剂汽化吸热,制冷。如此以来实现这个制冷的程序。而在面向对象的编程中,这些都会被封装在一个对象的方法中。
面向对象在封装的过程中使比较麻烦的,但是优点是编程灵活,代码可复用,高度模块化,易于维护和开发。
1.1 三大特征
封装:需要的属性方法都在一个抽象对象中,用到时只需调用即可
继承:新建的抽象对象集合可以继承已有抽象集合的属性和方法
多态:一个抽象集合可以有各种方法
1.2 基本和引用数据类型
基本数据类型存储在栈中,占用空间固定,内存栈会在基本数据类型引用结束后就会销毁
引用数据类型即对象,存储在堆中,占用空间不固定,其属性和方法都是以地址的形式存储在栈中,需要引用时也是先访问地址,再通过地址访问堆内存中的数据。只有在一个对象没有任何变量引用它时,才会被系统的垃圾回收机制回收。
1.3 构造函数和实例化对象
构造函数是实例化对象时用到的一个函数,通过它可以把抽象的对象集合实例化一个具体的对象。
大致的过程如下
function Phone(brand, color) {
this.brand = brand;
this.color = color;
}
var phone4 = new Phone("huawei", "black"); //实例化对象
1.3.1 constructor属性
构造函数实例化对象的constructor属性指向的是构造函数本身
1.4 解决内存浪费问题
构造函数每次实例化时都会开辟新的空间,即使实例化的属性的方法相同,所以就会存在内存浪费问题
1.4.1 原型
在Javascript 中,每一个构造函数都有一个 prototype 属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承
所以可以把需要共享的属性和方法都定义在prototype对象上
function Student(name, age) {
this.name = name;
this.age = age;
}
Student.prototype.study = function () {
console.log("学习");
}
var student1 = new Student("张三", "18");
这时所有实例的study方法都指向同一个内存地址
原型的优点:避免内存浪费,数据可以共享
1.4.1 实例化对象的查找规则
先在自己身上找,找到即返回,自己身上找不到,则沿着原型链(构造函数的prototype对象)向上查找,找到即返回,如果一直到原型链的末端还没有找到,则返回 undefined
标签:对象,javaScript,实例,抽象,制冷,构造函数,属性 来源: https://www.cnblogs.com/recreyed/p/js4.html