面向对象简介

面向对象

概述

  • 简单的概述如下面向对象

面向对象变成的全称为object oriented programming, 简称oop。 面向对象编程时用抽象的方式建立基于现实世界模型的一种编程模式。
面向对象编程能够看做时使用一系列对象相互协做的软件设计。面向对象编程设计的目的时在编程中促进更好的灵活性和可维护性。凭借其对模块化的重视,面向对象的代码开发更简单,更容易理解。面向对象编程的三个重要特征:( 1 封装,2 继承,3 多态)。
全部的程序是由必定的属性和行为对象组成的,不一样的对象的访问经过函数调用来完成,对详间全部的交流都是经过方法调用,经过对封装对象数据,提升复用率。编程

  • 向对象是什么

JavaScript是一种基于原型的面向对象语言,而不是基于类的。正是因为这一种根本的区别,其如何建立对象的层级结构以及对象的属性与属性值是如何继承的并非那么清晰。
基于原型的语言(如JavaScript) 并非在这种区别:它只有对象。基于原型的语言具备所谓原型对象(prototypcal object) 的概念。原型对象能够做为一个模板,新对象能够从中获取原始的属性。任何对象均可以指定其自身的属性,既能够是建立时也能够在运行建立时。并且任何对象均可以做为另外一个对象的原型(prototype),从而容许后者共享前者的属性。json

  • 封装

所谓封装就是按照要求使用并获得对应的结果,而不须要知道其真实的执行原理是怎么样的
封装主要用于阐述对象所包含的内容,他们一般由两个部分组成:
1相关的数据(用于存储属性) 2基于这些数据所能做的事情数据结构

  • 继承

继承一般是指类与类之间的关系。若是两个类都具备相同的属性或方法,那么可让一个继承于另外一个类,这样就不须要在前者再次定义一样的属性或方法。
建立一个或者多个类的专门版本类方式为继承。建立的专本版本的类一般叫作子类,另外的类一般叫作父类。在JavaScript中,继承经过赋予子类一个父类的实例并专门化子类来实现模块化

  • 多态

不一样的对象能够定义具备相同名称的方法,方法是做用于所在的对象中。这种不一样对象经过相同方法的调用实现各自行为的能力,被称之为多态。函数

构造函数

  • 构造函数

构造函数由称之为构造器或对象模板,是对象中的一个方法,在实例化是构造器被调用。在JavaScript中函数就能够做为构造器使用,所以不须要特别的定义一个构造器方法。
function person(){ console。log(‘person instantiated’);
}
var person = new person ();
这里的person()并非做为函数 而是构造函数。
建立person对象须要使用new关键自oop

  • 构造函数的实行

构造函数的属性实际上就是对象的变量。一个对象能够包阔多个属性,定义构造函数属性是使用this这是关键字。
function Person (firstname){
this.firstname =firstName;
console.log (‘person instanttiated’);
}
var person = new person (‘Alice’);
console。log (‘person is +person。firstname’);this

  • 构造函数的方法

构造函数的方法想构造函数的属性,不一样的是方法是以恶函数(或像函数一个样被定义)。定义构造函数的方法时使用this关键词。
var person = function(firstname){
this.firstname = firstName;
this.sayhello = function () {
console.log ('hello, I'm+this.firstName');prototype

};
};
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 (){
return 'hello ' +this.name;
}对象

Object类型

  • 属性描述符

JavaScript提供里一个内部数据结构,用于描述对象的值,控制其行为,例如该属性是否可写,是否可配置,是否修改以及是否可枚举等。这个数据结构被称为'属性描述符'。
每个属性都有本身对应的属性描述符,保存属性的元信息。
{
value :‘卧龙学院’,
writable:false,
enumerable:true,
configurable:false,
get:undefined,
set:undefind
}
对象里面目前存在的属性描述符有两种主要形式:数据描述符和存储描述符。

  • 数据描述符

数据描述符是一个具备值得属性,该值多是可写的,也可能不是可写的。该数据描述符具备如下可选建值:
value:该属性对应的值。能够是任何有效的JavaScript值(数值 对象,函数等。默认为undefined)
writable:当且仅当该属性的writable 为true时,value才能被赋值运算符改变。默认为false。
configurable:当且仅当该属性的configurable为true时,该属性描述符才可以被改变,同时该属性也能从对应的对向上被删除。默认为false。
enumerable:当且仅当该属性的enumerable为true时,该属性才可以出如今对向上的枚举属性中默认为false

  • 存储描述符

存取描述符时由getter-setter 函数对描述的属性。存取描述符具备如下可选建值:
get:给属性提供getter方法,若是没有getter则为undefined。当访问该属性时,该方法会被执行,方法执行时没有参数传入,可是会传入this对象。
set:给属性提供setter的方法,若是没有setter则为undefined。当属性值修改时,触发执行该方法。该方法将接受惟一参数,及该属性新的参数值。
configurable:当且仅当该属性的writable 为true时 ,该属性描述符才可以被该表,同时属性也能从对应的对象上被删除。默认为false。
enumerable:当且仅当该属性的enumerable为true时,该属性才可以出如今对象的枚举属性中。
默认为false

  • 获取属性描述符

ObjectgetowmpropretyDescriptor()方法返回指定对象上一个自由属性对应的属性描述符。
obj:须要查找的目标对像,
prop:目标对象内属性名称(string类型)。
返回值:若是指定的属性存在于对向上,则返回其属性描述符对象,不然返回undefined。

  • 设置属性描述符

objectdefineproperty()方法为对象定义属性改变现有属性,并返回该对象。
obj:要在其上顶会议属性的对象。
prop:要定义或者修改的属性名称。
descriptor:将被定义或修改的属性描述符。
返回值:被传递给函数的对象。
objectdefineproperties()方法为对象定义一个或者多个新属性或修改现有属性,并返回该对象。
obj:要在其上定义属性的对象。
props:要定义其可枚举属性或修改的修改属性描述符的对象。
返回值:被传递给函数的对象。

  • 属性描述符的可选建值

writable:Boolean值,表示目标属性的值是否能够内修改。当且仅当该属性的writable为true时,value才能被赋值元算符该表。默认为false。

  • 属性描述符的可选键值

configurable:Boolean值,表示目标属性的描述符是否能够被修改。当且仅当该属性的configurable为true时,该属性描述符才可以被该表,同时该属性也能从对应的对向上被删除。默认为false

  • enumerable:Boolean值,表示目标属性是否可遍历。当且仅当该属性的enumerable为true时,

该属性才可以被出如今对象的枚举属性中。默认为false。
若是对象的属性的enumerable的值为false,如下三种操做取不到的属性:
for in
objectkey()方法
jsonstring()方法

  • 属性描述符的存储器

对象的属性除了能够直接定义之外,还可使用存储器进行定义。其中setter为存储函数,使用属性描述符中的set;getter为取值函数,使用属性喵符中的get

  • 防篡改

定义的对象默认在任什么时候候,任何位置,不管有意义的仍是无心义的均可以修改对象的属性或方法。而这些篡改可能会影响内置属性或方法,从而致使对象的正常功能可能没法使用。JavaScript在ecmascrip5版本中新增字放置篡改对象的属性或方法的机制,共提供了如下三级保护方式:禁止拓展:禁止为对象扩展新的属性或方法密封对象:禁止扩展新的属性或方法,禁止配置现有的属性或方法描述符,仅容许读写属性的值。冻结对象:禁止对对象执行任何修改操做。

相关文章
相关标签/搜索