面向对象的程序设计
2017-02-21 12:19:23 0 举报
AI智能生成
面向对象程序设计(Object-Oriented Programming,OOP)是一种编程范式,其核心思想是将数据和对数据的操作封装在一起,形成一个对象。这种设计方式可以提高代码的重用性、可维护性和灵活性。在面向对象的程序设计中,我们定义了类(Class)来描述对象的属性和行为,通过实例化类来创建具体的对象。对象之间可以通过消息传递进行交互,实现了高度的模块化和解耦。常见的面向对象编程语言有Java、Python、C++等。
作者其他创作
大纲/内容
activity
ranklist
聊天
popularity
动态
temporary
6.2创建对象
6.2.1 工厂模式
why
虽然Object构造函数或对象字面量都可以用来创建单个对象,
但这些方式有个明显的缺点,使用同一个接口创建很多对象,
会产生大量的重复代码。
但这些方式有个明显的缺点,使用同一个接口创建很多对象,
会产生大量的重复代码。
function createPerson(name,age,job){
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function(){
alert(this.name);
};
return o;
}
var person1 = createPerson("欧丽珊",29,"软件开发工程师");
var person2 = createPerson("xiao",20,"画家");
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function(){
alert(this.name);
};
return o;
}
var person1 = createPerson("欧丽珊",29,"软件开发工程师");
var person2 = createPerson("xiao",20,"画家");
工厂模式虽然解决了创建多个相似对象的问题,
但却没有解决对象识别的问题,即怎么互道一个对象的类型
但却没有解决对象识别的问题,即怎么互道一个对象的类型
6.2.2 构造函数模式
why
为了解决工厂模式而诞生
function Person(){
this.name = name;
this.age = age;
this.job = job;
this.sayName = function(){
alert(this.name);
}
}
var person1 = new Person("欧丽珊",29,"软件开发工程师");
var person2 = new Person("xiao",20,"画家");
this.name = name;
this.age = age;
this.job = job;
this.sayName = function(){
alert(this.name);
}
}
var person1 = new Person("欧丽珊",29,"软件开发工程师");
var person2 = new Person("xiao",20,"画家");
与工厂模式比较
没有显示地穿件对象
直接将属性和方法赋给了this对象
没有return语句
按照惯例,构造函数始终都应该以一个大写字母开头,例如Person;
而非构造函数则应该以一个小写字母开头
而非构造函数则应该以一个小写字母开头
引用类型的对象都有一个constructor属性,该属性指向引用类型,最初
设计来标识对象类型的
设计来标识对象类型的
1、将构造函数当做函数
//当做构造函数使用
var person = new Person("Nicholas",29,"软件工程师");
person.sayName();//Nicholas
//作为普通函数调用
Person("Greg",27,"Doctor");//添加到window,因为在window调用,就是相当于window包含了这个对象
window.sayName();//Greg
//在另一个对象的作用域中调用
var o = new Object();
Person.call(o,"Kristen",25,"Nurse");
o.sayName();
var person = new Person("Nicholas",29,"软件工程师");
person.sayName();//Nicholas
//作为普通函数调用
Person("Greg",27,"Doctor");//添加到window,因为在window调用,就是相当于window包含了这个对象
window.sayName();//Greg
//在另一个对象的作用域中调用
var o = new Object();
Person.call(o,"Kristen",25,"Nurse");
o.sayName();
任何函数,只要通过new操作符来调用,
那它就可以作为构造函数;而任何函数,
如果不通过new操作符来调用,那它跟普通函数
也不会有什么两样
那它就可以作为构造函数;而任何函数,
如果不通过new操作符来调用,那它跟普通函数
也不会有什么两样
2、构造函数的问题
构造函数模式虽然好用,但sayName方法都要在每个实例上重新创建一遍,
本来一模一样的东西共用就好了的
本来一模一样的东西共用就好了的
解决办法:
通过把函数定义转移到构造函数外部来解决这个问题
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = sayName;
}
function sayName(){
alert(this.name);
}
var person1 = new Person("欧丽珊",29,"软件开发工程师");
var person2 = new Person("xiao",20,"画家");
通过把函数定义转移到构造函数外部来解决这个问题
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = sayName;
}
function sayName(){
alert(this.name);
}
var person1 = new Person("欧丽珊",29,"软件开发工程师");
var person2 = new Person("xiao",20,"画家");
新问题又来了,移除外面去就相当于全局函数了,
如果对象需要定义很多方法,那么就要定义很多个全局
函数,于是我们这个自定义的引用类型就丝毫没有封装性可言了
如果对象需要定义很多方法,那么就要定义很多个全局
函数,于是我们这个自定义的引用类型就丝毫没有封装性可言了
6.2.3 原型模式
我们创建的每个函数都有一个prototype(原型)属性,
这个属性是一个指针,指向一个对象,而这个对象的用途
是包含可以由特定类型的所有实例共享的属性和方法
这个属性是一个指针,指向一个对象,而这个对象的用途
是包含可以由特定类型的所有实例共享的属性和方法
1、理解原型对象
礼物模块
金币系统
CMS
fans
coupon
tag
0 条评论
下一页