Javascript-类-模块化[面向对象已经无处不在]

时间:2022-04-30 07:43:50

Javascript是基于原型的编程语言,并不是面向对象的语言。

ES6已实现class关键字,这让js看起来更像一门面向对象的语言

主流语言类型:

  • 基于原型的语言
  • 面向过程的语言
  • 面向对象的语言
  • 函数式的语言

每一种语言的编程方式以及语法都会有所不同。

虽然Javascript并没有内置的类的实现,但可以模拟。Javascript有构造函数和new运算符,我们可以通过构造函数来实例化一个对象。

当使用new关键字来调用构造函数时,执行上下文变成一个空的上下文,这个上下文代表了新生成的实例,所以this指向当前创建的实例。

面向对象应该是现在使用最广的一种编程思想不了解的点此,需自备*

说到面向对象,首先让我想起的是C++,在我的印象里,C++是一门严格遵循面向对象思想的一门语言,封装、继承、多态。不仅如此,还支持多继承,这是其它很多语言没有做到的。

Javascript面向对象实现

说到面向对象,最直观的就是通过 class 关键字来声明,因为js还没实现该关键字(ES6已实现),在这里我们直接用构造函数来模拟即可。(以C++为例,在生成一个对象的时候也是去调用构造函数来创建对象的)

面向对象的三个特点:

  • 封装
  • 继承
  • 多态

创建一个Animal类

var Animal = function(){
	/*属性*/
	this.name = "animal";

	/*方法[函数、方法,在这里为什么不称为函数而称之为方法?]*/
	this.talk = function(){
		console.log("what's your name?");
	}
}

实例化对象

var Cat = new Animal;
var Dog = new Animal;

实例化一个对象时一般会需要进行初始化设置,这里可以通过构造函数传参实现

var Animal = function(name){
	/*属性*/
	this.name = name || "Animal";

	/*方法*/
	this.talk = function(){
		console.log("My name is: ", name);
	}
}

var cat = new Animal("Cat");	/*名字是Cat*/
var dog = new Animal("Dog");	/*名字是Dog*/

说明:

var name;
name = pname || "Animal";
/*与下面的功能等同*/
var name;
if(pname){
	name = pname;
}else{
	name = "Animal";
}

这是js的一种默认值设置技巧,当pname == undefined时,name赋值为 “Animal”,否则name等于pname


原文地址:点击打开链接