面向对象 ( OO ) 的程序设计——创建对象

为了避免大量重复代码产生,可采用以下方法创建对象

1 工厂模式

 1 function createPerson(name,age,job){
 2     var o = new Object();
 3     o.name = name;
 4     o.age = age;
 5     o.job = job;
 6     return o;
 7 }
 8
 9 var person1 = createPerson("Bob",23,"Doctor");
10 var person2 = createPerson("Lily",21,"Student");

其实就是一个函数,在函数里面创建一个对象,给对象赋上传过来的值,再把这个对象返回给调用的地方。

2 构造函数模式

1 function People(name, age, job){
2     this.name = name;
3     this.age = age;
4     this.job = job;
5 }
6
7 var people1 = new People("Bob",23,"Doctor");
8 var people2 = new People("Lily",21,"Student");  

构造函数大家都知道,C++已经学过就不多说了。

3 原型模式

 1 function Person(){}
 2
 3 Person.prototype = {
 4     name: "Bob",
 5     age: 23,
 6     job: "Doctor"
 7 };
 8
 9 var people1 = new Person();
10
11 people1.name = "Lily";
12 people1.age = 21;
13 people1.job = "Student";

这样把属性也给了 prototype,不太推荐。

4 寄生构造函数模式

代码就不贴了,工厂模式的定义,但是实例化方法类似于构造函数,使用 new 关键字

  • 实际创建自定义对象时会构造函数与原型模式混合使用,构造函数定义实例属性,原型模式定义方法和共享的属性,这样可以最大限度地节约内存
时间: 2024-08-29 09:49:09

面向对象 ( OO ) 的程序设计——创建对象的相关文章

面向对象 ( OO ) 的程序设计——理解对象

1 创建自定义对象 创建自定义对象的最简单方法为创建 Object 的实例,并添加属性方法,也可以使用对象字面量 2 访问器属性 访问器属性包括 getter 和 setter 函数,读取访问器属性时,调用 getter 函数,写入访问器属性时,调用 setter 属性 1 var people = { 2 _year: 1995, 3 age: 0 4 }; 5 6 Object.defineProperty(people, "year", { 7 get:function(){ 8

面向对象 ( OO ) 的程序设计——继承

仅支持实现继承,且主要依靠原型链来实现,不过一般会混合构造函数一起实现继承 1 原型链 继承使用原型链进行传递,类似指针一层层向上指向对应原型,构成链状 在使用原型链近似实现继承时,实例中的所有属性和方法都会被继承 1 // 第一个类型 2 function Func1(){ 3 this.property = true; 4 } 5 // 第一个类型的方法 6 Func1.prototype.getFunc1Value = function(){ 7 return this.property;

设计模式 之 面向对象(OO)思维

[本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020] 面向对象(OO)思维: 1. 考虑类 名词 2. 考虑属性 不可脱离具体的应用环境 3. 考虑方法 4. 考虑类之间的关系 5. 考虑隐藏(封装) 降低耦合度 6. 考虑继承 耦合度强,应该谨慎使用 7. 考虑多态 核心中的核心,多态带来了可扩展性. 多态有三个特性:1继承:2重写:3 父类的引用指向子类的对象 面向对象设计时需注意的问题: 1. 设计没有绝对的对与错 2.

面向对象OO第5-7次作业总结

面向对象OO第5-7次作业总结 学习OO七周了,深切的感受到了这门课程的不友好.前三次作业能够算是勉强地通过了,但是从第五次作业开始就完全GG了.这三次作业,从多线程电梯开始,然后文件监控,然后到出租车,都没有写出来有效的作业.所以就不按照给定的基于度量来分析自己的程序结构了. 第五次作业 多线程电梯 这次作业是根据第三次作业改写而来的,自认为前两个电梯写的还不错,只是电梯捎带功能上少了几个判断的条件,以为这次能够加入多线程完美运行.但是实际写起来却并不如意,各个线程本身写出来了,但是在各个线程

面向对象的程序设计——创建对象

一.工厂模式 工厂模式解决了创建多个相似对象的问题,但没有解决对象识别的问题(即怎样知道一个对象的类型). 1 //工厂模式创建对象 2 function createPerson(name , age , job){ 3 var o = new Object(); 4 o.name = name; 5 o.job = job; 6 o.sayName = function(){ 7 alert(this.name); 8 } 9 return o; 10 } 11 var person2 =

第六章-面向对象的程序设计—创建对象

使用对象字面量和或者构造函数都可以创建对象,但是都有缺点:使用同一个借口创建对象,会导致代码重复.为解决这个问题,人们开始使用工厂模式. 1 工厂模式 1 function create(name,age,job){ 2 var o = new Object(); 3 o.name = name; 4 o.age = age; 5 o.sayName = function(){ 6 alert(this.name); 7 } 8 } 9 var person1 = create('XU',27)

javascript笔记3-面向对象的程序设计-创建对象

javascript的对象:无序属性的集合,而每个属性可以包含基本值.对象或者函数.举例: 1 var person = new Object(); 2 person.name = "Nicholas"; 3 person.age = 29; 4 person.job = "Software Engineer"; 5 person.sayName = function(){ 6 alert(this.name); 7 }; 8 9 person.sayName();

javascript面向对象(二)--创建对象

1 /创建对象: 2 //最基本的 Object构造以及字面量法 3 //一.工程模式创建:使用参数传值在构造 4 function createObject(name,age,job){ 5 var o = new Object(); 6 o.name = name; 7 o.age = age; 8 o.job = job; 9 o.sayName = function(){ 10 alert(this.name); 11 }; 12 return o; 13 } 14 var person

JavaScript之面向对象学习六原型模式创建对象的问题,组合使用构造函数模式和原型模式创建对象

一.仔细分析前面的原型模式创建对象的方法,发现原型模式创建对象,也存在一些问题,如下: 1.它省略了为构造函数传递初始化参数这个环节,结果所有实例在默认的情况下都将取得相同的属性值,这还不是最大的问题! 2.最大的问题是原型中的所有属性是被很多实例所共享的,这种共享对于函数非常合适,对于那些包含基本值的属性也说得过去,因为我们知道可以在实例上添加一个同名属性,可以隐藏原型中的对应属性.但是对于包含应用类型值的属性来说,问题就非常严重了,代码如下: function Person(){ } Per