javascript 面向对象编辑(OOP)

来源:互联网 发布:期货数据 python 编辑:程序博客网 时间:2024/06/08 17:11

面向对象变成OOP(Object Oriented Program)是一种计算机编程框架。

OOP的一条基本原则是------计算机是由单个能够起到子程序作用的单元或对象组合而成。

“对象”指的是类的实例,它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重要性、灵活性和扩展性。

“对象”在显示支持面向对象的语言中,一般是指类在存储中装载的实例,具有相关的成员变量和成员函数(也称为“方法”)

OOP主要有一下的概念和组件:

组件 - 数据和功能一起在运行着的计算机程序中形成单元,组件在OOP计算机程序中是模块和结构化得基础

抽象性 - 程序有能力忽略正在处理中信息的某些方面,即对信息主要方面关注的能力

封装 - 也叫做信息封装:确保组件不会以不可预期的方式改变其它组件的内部状态;只有在那些提供内部状态改变方法的组件中,才可以访问其内部状态。每类组件都提供了一个与其他组件联系的借口,并规定了其它组件进行调用的方法

多态性 - 组件的引用和类集合涉及到其他许多不同的类型的组件,而且引用组件所产生的结果依据实际调用的类型。

继承性 - 允许在现存的组件基础上创建子类组件,这统一并增强了多态性和封装性。

JavaScript的核心是支持面向对象的,同时它也提供了强大灵活的OOP(Object Oriented Program)语言能力。

面对对象编程是用抽象方式创建基于现实世界模型的一种编程模式。

术语

Namespace 命名空间   ---- 允许开发人员在一个独特,应用相关的名字的名称下捆绑所有功能的容器

Class 类 ----定义对象的特征,它是对象的属性和方法的模板定义

Object 对象 ---- 类的一个实例

Property 属性 ---- 对象的特征,比如颜色

Method 方法 ---- 对象的能力,比如行走

Constructor 构造函数 ---- 对象初始化的瞬间,被调用的方法,通常它的名字与包含它的类一致

Inheritance 继承 ----- 一个类可以继承另一个类的特征

Encapsulation 封装 ---- 一种把数据和相关方法绑在一起的方法

Abstraction 抽象 ---- 结合复杂的继承,方法,属性的对象能够模拟现实的模型

Polymorphism 多态 ----不同类可以定义相同的方法或属性。

/*命名空间*//*命名空间是一个容器,它允许开发人员在一个独特的,特定于应用程序的名称下捆绑所有的功能。*//*在JavaScript中,命名空间只是另一个包含方法,属性,对象的对象*//*创建一个全局变量MYAPP*/var MYAPP = MYAPP || {} //全名命名空间MYAPP.event ={}; //子命名空间/*下面用于创建命名空间和添加变量、函数和方法的代码写法*///给普通方法和属性创建一个叫MYAPP.commonMethod的容器MYAPP.commonMethod = {    regExForName : "" , //定义名字的正则验证    regExForPhone : "", //定义电话的正则验证    validateName : function(name){        //对名字name做些操作,可以通过使用"this.regExForname"        //访问regExForName变量    }}//对象和方法一起声明MYAPP.event = {    addListener : function(el,type,fn){        //代码    },    removeListener : function(el,type,fn){      //代码    },    getEvent : function(e){        //代码    }    //还可以添加其他属性和方法}//使用addListener方法的写法MYAPP.event.addListener("yourel","type",callback);/*标准内置对象*//*JavaScript有包含在其核心的几个对象,例如,Math,Object,Array和String对象*/console.log(Math.random());/*自定义对象*//*类 Class*/function Person(){ }// orvar Person = function( ){ }/*对象(类的实例)Object */function Person(){}var person1 = new Person();var person2 = new Person();/*构造器*//*在实例化构造器被调用(也就是对象实例被创建时)。构造器是对象中的一个方法,每个生命的函数都可以在实例化后被调用执行*/function Person(){    alert('Person instantiated')}var person1 = new Person();var person2 = new Person();/*属性(对象的属性)Property*//*属性就是类中包含的变量,每一个对象实例有若干个属性,为了正确的继承,属性应该被定义在类的原型属性(函数)中*//*可以使用关键字this 调用类中的属性,this是对当前对象的引用*/function Person(firstName){    this.firstName = firstName;    alert('Person instantiated');}var person1 = new Person('alice');var person2 = new Person('Bob');alert('person1 is'+person1.firstName);alert('person1 is'+person2.firstName);/*方法(对象属性)Method*//*方法与属性很类似,不同的是:一个是函数,另一个可以被定义为函数。调用方法很想存取一个属性,不同的是add()的方法明后可能带有参数*//*为了定义一个方法,需要讲一个函数赋值给类的prototype属性;这个赋值给函数的名称就是用来给对象外部调用它使用的*/function Person(firstName){    this.firstName = firstName;}Person.prototype.sayHello = function(){    alert("Hello, I'm" + this.firstName);}var person1 =new Person();var person2 = new Person();//call the Person sayHello methodperson1.sayHello();person2.sayHello();/*继承 Inheritance*//*创建一个或多个类的专门版本类方式称为继承(javascript支持单继承)*//*在实现浏览器中可以使用Object.create实现继承*///定义Person构造器function Person(firstName){    this.firstName = firstName;}//在Person.prototype中加入方法Person.prototype.walk = function(){    alert("I am walking!");};Person.prototype.sayHello = function(){    alert("Hello, I'm"+ this.firstName);}//定义student构造器function Student(firstName,subject){    //调用父类构造器,确保(使用function#call)"this"在调用中正确    Person.call(this,firstName);    //初始化Student类特有属性    this.subject = subject;};//创建一个由Person.prototype继承而来的Student.prototype对象Student.prototype = Object.create(Person.prototype);//设置"constructor"属性指向studentStudent.prototype.constructor=Student;// 更换"sayHello" 方法Student.prototype.sayHello = function(){    console.log("Hello, I'm " + this.firstName + ". I'm studying " + this.subject + ".");};// 加入"sayGoodBye" 方法Student.prototype.sayGoodBye = function(){    console.log("Goodbye!");};// 测试实例:var student1 = new Student("Janet", "Applied Physics");student1.sayHello();   // "Hello, I'm Janet. I'm studying Applied Physics."student1.walk();       // "I am walking!"student1.sayGoodBye(); // "Goodbye!"// Check that instanceof works correctlyconsole.log(student1 instanceof Person);  // trueconsole.log(student1 instanceof Student); // true


0 0
原创粉丝点击