不少开发对JavaScript实现面向对象编程存在一知半解,并且不少的在项目实践中写的都是面向过程编程的代码,因此,希望能从零入手介绍面向对象的一些概念到实现简单的面向对象的例子让大家包括我自己加深对面向对象的认知。硬文一篇,希望能对大家有帮助 ^v^
对象基础 概念对象是一个包含相关数据和方法的集合,是通过变量和函数组成,通常被我们说成属性和方法,常用对象字面量的形式表示。
创建方法1.初始化对象
var person={}
2.添加属性(变量)和方法(函数)
var person={
name:'aaron',
say:function(){
alert('hello')
}
}
3.获取属性和执行方法
person.name person.say()
备注:获取属性和执行方法有两种方法,就是说我上面列举的其一:点表示法,还有一种就是括号表示法。如下:
person['name']
person['say']()
因此,有时对象也被叫做关联数组,即对象做了字符串到值的映射,而数组做的是数字到值的映射。
4.运行截图
5.设置对象成员
备注:有一点需要了解到的是,括号表示法能做到通过定义变量名的方式去设置对象成员,而这一点是点表示法没法实现的。
6.“this”的含义
this的指向其实是一直都让开发者头大的问题了,尤其是后端写JS时。其实说白了this就是指向了当前代码运行时的对象。
例如:
由于对象字面量执行的是当前对象,所以this指向了person。而像创建的构造函数等this的指向就是构造函数实例对象了 优点
一目了然,对象字面量创建的对象的好处可以有效的把对象关联的属性和方法统一了起来,也减少了全局变量的污染,得到一定程度的安全(减少了定义全变量覆盖对象属性的危险)。
面向对象--构造函数 了解OOP思想例如从现实世界的某个实例出发,对于一个人(person)来说,我们能在他们身上获取到很多信息(他们的住址,身高,鞋码等等),然后我们会基于这些信息介绍关于他们,并需要他们做出回应。而在面向对象的语言中,我们就可以通过类(class)的概念去描述一个对象,而这个类就是定义对象特质的模板。通过创建的class,我们就可以基于它来创建一些拥有class中属性和方法的对象,即实例对象。而这些实例对象一般是具体的人,例如老师,学生。在OOP中,我们也可以基于这个class,创建其他的新类,而这些新的子类(例如家长)可以继承它们父类的属性(数据)和方法(功能),来使用父对象共有的功能。
因此,通过对泛指人到具体的某个学生/老师的关系,我们就可以总结到面向对象的三个基本特性:封装,继承,多态。
引入概念 通过了解面向对象编程(OOP)的基本概念,什么是对象和对象的属性,方法,并了解实现面向对象编程的基本特性。也了解常用的创建对象方法--对象字面量,我们已经对对象的基本概念有了了解。但是,通过对象字面量来创建的只是单一的实体类,并不能实现通用对象(现实模型)的封装,即真正的实现面向对象。
JavaScript是通过构建函数的方式来定义对象和特征的,而构建的实例对象也有通过原型链的方式来继承某些特性。
1.Person()构造函数,创建实例对象并访问属性和方法:
2.其他创建对象实例的姿势
1.Object()构造函数
var person1=new Object();
person1.name='ace';
person1.age=30;
person1.greeting=function(){
alert('Hi! I\'m ' + this.name + '.'')
}
2.使用create():这样就可以基于person1创建与person1具有相同属性和方法的对象。
var person2=Object.create(person1);
面向对象--对象原型 引入概念JavaScript的继承机制是有别于其他经典的面向对象编程语言的,是通过原型来实现从其他对象继承功能特性的。