您的位置:首页 > Web前端 > JavaScript

javascript 面向对象编辑(OOP)

2016-07-06 19:58 375 查看
面向对象变成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(){ }
// or
var 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 method
person1.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"属性指向student
Student.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 correctly
console.log(student1 instanceof Person); // true
console.log(student1 instanceof Student); // true
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: