什么是面向对象?
面向对象是一种开发思想 ,在程序中用对象来描述一个具体的事物。
对象:封装了一个事物的属性和功能的数据结构
优点:面向对象和现实中人得想法很接近,便于大程序得维护
面向对象的3个特点
1、封装(即创建自定义对象)
1.1、使用对象的直接量
var obj = {属性名:属性值,......方法名:方法值,.....}
1.2、使用new:2步 先创建一个空对象,暂时不知道对象成员
var obj = new Object();
然后再向对象中添加成员
obj.属性名 = 属性值
...
obj.方法名 = 方法值(等同于函数名 函数)
1.3、创建构造函数
构造函数:专门描述一类对象统一结构的函数,--共有的属性或者方法
使用场合:反复创建多个相同结构的对象时,都要先定义统一的结构函数,在使用函数反复创建对象,再创建构造函数的同时会产生一个原型对象。
定义构造函数语法:
function 类型名-首字母要大写(属性参数列表){
this.属性名 = 属性值;
...
rhis.方法名 = function(...){...}
}
用new关键字调用构造函数,传入具体对象的属性值(创建并修饰新对象)
var obj = new 构造函数名(属性值列表);
创建一个指定的类型对象;用new去调用类型
2、继承
父对象的成员,子对象不用重复创建,也可以直接使用,这样就可以节省内存
使用场合:
只要一类子对象,都需要相同的属性或者功能的时候,都要讲相同的属性或者功能在父元素中定义一次
在JavaScript中继承斗继承的原型对象
原型对象:专门集中一类子对象相同的属性或者功能的父对象,同一类子对象所共有的属性或者功能
定义原型对象?
1.创建
每创建一个构造函数同时就会生成一个原型对象
function Student(sname,sage){
this.sname = sname;
this.sage = sage;
}
2.添加
prototype是构造函数的一个属性
Student.prototype.inr=function(){...} 在原型对象中添加方法
Student.prototype.color="red; 在原型对象中添加一个color属性,并且属性值为 red
3.访问
访问关于原型对象中的方法和属性的访问
方法和构造函数生成的对象的成员一样访问
对象名.属性/方法名()
4.改
正确的修改原型对象中的属性
Student.prototype.className = "七年级2班";
3、多态
面向对象编程中的多态性是能够创建具有多种形式的变量,函数或对象。
多态性在面向对象编程中的主要用途是属于不同类型的对象响应相同名称的方法,字段或属性调用的能力,每个对象根据适当的类型特定行为进行响应。
封装Encapsulation
如下代码,这就算是封装了
(function (windows, undefined) {
var i = 0;//相对外部环境来说,这里的i就算是封装了
})(window, undefined);
继承Inheritance
(function (windows, undefined) {
//父类
function Person() { }
Person.prototype.name = "name in Person";
//子类
function Student() { }
Student.prototype = new Person(); //修复原型
Student.prototype.constructor = Student; //构造函数
Student.prototype.supr = Person.prototype; //父类
//创建子类实例
var stu = new Student();
Student.prototype.age = 28;
Student.prototype.name = "name in Student instance";
//打印子类成员及父类成员
alert(stu.name); //name in Student instance
alert(stu.supr.name); //name in Person
alert(stu.age); //28
})(window, undefined);
多态Polymorphism
有了继承,多态就好办了
//这就是继承了
(function (windows, undefined) {
//父类
function Person() { }
Person.prototype.name = "name in Person";
Person.prototype.learning = function () {
alert("learning in Person")
}
//子类
function Student() { }
Student.prototype = new Person(); //修复原型
Student.prototype.constructor = Student; //构造函数
Student.prototype.supr = Person.prototype; //父类
Student.prototype.learning = function () {
alert("learning in Student");
}
//工人
function Worker() { }
Worker.prototype = new Person(); //修复原型
Worker.prototype.constructor = Worker; //构造函数
Worker.prototype.supr = Person.prototype; //父类
Worker.prototype.learning = function () {
alert("learning in Worker");
}
//工厂
var personFactory = function (type) {
switch (type) {
case "Worker":
return new Worker();
break;
case "Student":
return new Student();
break;
}
return new Person();
}
//客户端
var person = personFactory("Student");
person.learning(); //learning in Student
person = personFactory("Worker");
person.learning(); //learning in Worker
})(window, undefined);