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

来源:互联网 发布:植物大战僵尸源码 编辑:程序博客网 时间:2024/06/06 06:46

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


原文地址:点击打开链接

0 0