javaScript(肆)

2021/6/15 22:47:44

本文主要是介绍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(肆)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程