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
- javascript 面向对象编辑(OOP)
- javascript oop JavaScript面向对象编程
- 全面深入JavaScript OOP面向对象编程
- [JavaScript]JavaScript面向对象编程|OOP|继承|重写|接口
- [oop] 面向对象由浅入深
- 面向对象(OOP)
- OOP 面向对象系列
- 面向对象 OOP 解释
- 面向对象 --OOP
- 面向对象编程(OOP)
- 面向对象笔记(OOP)
- 面向对象 java oop
- OOP--面向对象编程
- OOP面向对象编程
- 面向对象oop
- OOP 面向对象编程
- oop面向对象
- 面向对象 oop
- nginx静态代理配置
- 微信公众平台开发教程第19篇-应用实例之人脸检测
- sysconf()
- 微信公众平台开发教程第20篇-新手解惑40则
- java中闰年的判断,以及判断是否是一个合法日期
- javascript 面向对象编辑(OOP)
- 微信公众平台开发教程第21篇-“可信网址”白名单
- 如何将格式为byte[]的图片保存在本地
- 链接全过程
- 剑指offer-3-面试16:反转链表
- pathconf()
- UVA 1262 Password
- 2016SDAU课程练习四1011 Problem K
- 循环链表的C语言实现