面向对象和构造函数
概述
面向对象是什么
面向对象编程的全称为 Object Oriented Prograrnming,简称为 OOP。面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式。
面向对象编程可以看作是使用一系列对象相互协作的软件设计。面向对象程序设计的目的是在编程中促进更好的灵活性和可维护性。凭借其对模块化的重视,面向对象的代码开发更简单,更容易理解。
所有的程序是由一定的属性和行为对象组成的,不同的对象的访问通过函数调用来完成,对象间所有的交流都是通过方法调用,通过对封装对象数据,提高复用率。
面向对象编程的三个主要特征是:
- 封装
- 继承
- 多态
JavaScript是一种基于原型的面向对象语言,而不是基于类的。
封装
所谓封装就是按照要求使用并得到对应的结果,而不需要知道其真实的执行原理是怎么样的。
继承
继承通常是指类与类之间的关系。如果两个类都有相同的属性或方法,那么可以让一个类继承于另一个类,这样就不需要在前者再次定义同样的属性或方法。
多态
不同的对象可以定义具有相同名称的方法,方法是作用于所在的对象中。这种不同对象通过相同方法的调用实现各自行为的能力,被称之为多态。
构造函数
构造函数
构造函数又称为构造器对象或对象模板,是对象中的一个方法,在实例化时构造器被调用。
function Person(){
console.log('Person instantiated');
}
var person = new Person();
- 这里的Person()并不是作为函数,而是构造函数。
- 创建person对象需要使用new关键字。
构造函数的属性
构造函数的属性实际上就是对象的变量。一个对象可以包含多个属性,定义构造函数的属性时使用this关键字。
function Person(firstName){
this.firstName = firstName;
console.log('Person instantiated');
}
var person = new Person('Alice');
console.log('person is' + person.firstName);
构造函数的方法
构造函数的方法很像构造函数的属性,不同的是方法是一个函数 (或者像函数一样被定义) 。定义构造函数的方法时使用this关键字。
var Person = function(sirstName){
this.firstName = firstName;
this.sayHello = function(){
console.log("Hello,I'm"+this.firstName);
};
};
var person = new Person("Alice");
person.sayHello();
this关键字
JavaScript有一套完全不同于其它语言的对this的处理机制。this关键字本身没有任何含义,在如下几种不同的情况下,this指向的各不相同。
- 全局范围内:this关键字会指向全局对象。
this.a = 10;//global.a=10
console.log(a);//10
- 构造函数内:this关键字会指向新创建的对象。
- 构造函数的方法内:this关键字会指向当前对象。
var hero = {};
hero.sayName = function(){
retuen "Hello" + this.name;
};