面向对象的编程(OOP)是一种编程方法,每个开发者在他们生活的某个阶段都会使用这种方法,围绕着对象或数据而不是逻辑或函数来组织软件设计,对象是一个具有某些属性和类型的实体。使用OOP技术的好处包括模块化、可重用性、安全性、生产力、灵活性,并且易于扩展和升级。
OOP的特点
OOP的三个主要特点如下
i) 封装
封装是OOP的一个概念,它将数据和操作这些数据的方法捆绑在一个单元内,例如,java中的一个类,一个类的实例被称为一个对象。封装也是指限制对某些类或对象的数据访问,因此所有的用户都不能访问某些对象的变量或状态值。
ii) 继承
在继承中,一个类(子类)继承了另一个类(父类)的所有方法和属性。
iii) 多态性
多态性是指一个属性有多种形式,是OOP的核心概念之一。多态性使我们能够创建关于对象的程序,而这些对象的确切类型在运行时是不知道的。
JavaScript是面向对象的吗?
JavaScript是一种基于原型的编程语言,主要用于创建Web应用程序和网页。原型编程语言是OOP的一种风格,其中已经创建的对象可以被克隆和重复使用,这样就可以构建程序或应用程序。在基于原型的编程语言中,函数被用作类的构造器。
JavaScript在OOP应用程序的编程方面非常出色,而且严重地基于对象,但是它不是一种基于类的OOP语言,而是一种基于原型的编程语言。然而,我们可以把JavaScript作为一种基于类的编程语言。JavaScript允许你制作或创建新的对象供你的应用程序使用。然而,需要注意的是,虽然OOP语言鼓励并关注关系和分类,但基于原型的语言则首先关注并鼓励行为,然后再进行分类。
在2015年,JavaScript引入了一个类的关键字,这是为了使JavaScript成为OOP语言,但它只是在现有的原型技术上的合成糖。外表看起来像OOP,然而在后台,原型设计仍在继续。
下面是一个JavaScript中OOP的例子,我们用类来定义学生对象,并有名字和成绩的属性,以及返回学生名字和成绩的方法study()。
class student {
constructor(name, grade) {
this.name = name;
this.grade = grade;
}
studies() {
return `${this.name} studies in ${grade}`;
}
}
let myStudent1 = new student("Jhon", 6);
console.log(myStudent1);

如果我们展开上面的截图中看到的原型,我们会看到proto引用了学生原型,而学生原型实际上引用了Object原型。

JavaScript封装实例
让我们看一个例子,其中使用了继承,定义了人的类或对象,一个人有一个名字,还定义了一个返回名字的方法。另一个类student被定义为person的扩展,因此继承了父类即person的所有属性和方法,在子类即student类中,我们使用了super关键字,调用了父类或person类的构造函数。你还可以看到,person对象和student对象都有一个名称相同的toString()方法。这被称为覆盖,OOP允许我们在子类中拥有一个与父类相同名称和签名的方法。
//Example of Inheritance
class person{
constructor(name){
this.name = name;
}
//String returns from this method
toString(){
return (`Name: ${this.name}`);
}
}
class student extends person{
constructor(name,regid){
//super keyword used to call Parent constructor
super(name);
this.regid = regid;
}
toString(){
return (`${super.toString()}, Registration ID: ${this.regid}`);
}
}
let myStudent1 = new student('Jhon',1032);
alert(myStudent1.toString());

总结
OOP是一种编程模型,它围绕对象而不是逻辑或函数来组织我们的软件设计。 一个对象有一些属性和价值。通过使用OOP,我们实现了安全性、生产力、可重用性以及更多。
JavaScript是一种基于原型的编程语言,然而在2015年引入了类关键词,这使得JavaScript像一种OOP编程语言,但正如我们在上面的描述中看到的那样,在后台原型设计仍在继续。简单地说,JavaScript是一种基于原型的面向对象的编程语言。