Java面向对象设计 构造函数设计

简介:

在Javascript面向对象设计一——工厂模式 中介绍了使用CreateEmployee()函数创建员工类。ECMAScript中的构造函数可以用来创建特定类型的对象,如Object和Array这样的原生构造函数,在运行时会自动出现在执行环境中,此外也可以创建自定义的构造函数,从而创建自定义对象类型的属性和方法。我们将使用构造函数模式将工厂模式进行改写。

function Employee(name, age, job) {
    this.name = name;
    this.age = age;
    this.job = job;
    this.sayName = function () {
        alert(this.name);
    };
}

var Jim = new Employee("jim", 22, "SoftWare Engineer");
var Sun = new Employee("Sun", 24, "Doctor");

Jim.sayName();
Sun.sayName();
在以上代码中Employee函数取代了CreateEmployee函数,Employee中的代码与CreateEmployee中的代码不同如下:

  没有显示的创建对象

  直接将属性和方法赋给了this对象

  没有return语句

  要创建Employee类的新实例,必须使用new操作符,实际会经历四个步骤:

  创建一个新对象

  将构造函数的作用域赋给新的对象

  执行构造函数中代码

  返回新对象

  以上代码最后Jim和Sun中分别保存着Employee的两个不同实例,这两个实例都有一个constructor(构造函数)属性,该属性指向Employee,可以做如下测试

alert(Jim instanceof Employee); //true
alert(Sun instanceof Employee);//true
同时这两个对象又都是Object类型的,可通过如下代码检测。

alert(Jim instanceof Object); //true
alert(Sun instanceof Object);//true
创建自定义的构造函数意味着将来可以把它的实例标石为一种特定的类型,而这也正是构造函数模式胜过工厂模式的地方。

  下面详细讲解一下构造函数:

  将构造函数当做函数

  构造函数与其他函数的唯一区别就在于调用它们的方式不同。但是构造函数也是函数,不存在定义构造函数的特殊语法。其实,任何函数,只有通过new来调用,那他就可以作为构造函数,例如,Employee除了以上用new方法调用外,还可以用如下方式来调用。

 

//作为普通函数调用
Employee("Sun", 28, "SoftWare Engineer"); //添加到window中
window.sayName();//Sun


//在另一个对象的作用域中调用
var o = new Object();
Employee.call(o, "Sun", 28, "SoftWare Engineer");
o.sayName();//Sum
这样就解决了两个函数做同一件事情的问题,但是新的问题又会出现了,这个在全局作用域中定义的函数,实际上只能被某个对象引用,而且最要命的问题是,如果对象需要定义很多方法,那么就需要定义很多个全局函数,所以这个自定义的引用类型,就没有任何封装性可言了.










本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/wws5201985/749540,如需转载请自行联系原作者
目录
相关文章
|
21天前
|
搜索推荐 Java
Java的面向对象特性主要包括封装、继承和多态
【4月更文挑战第5天】Java的面向对象特性主要包括封装、继承和多态
15 3
|
1天前
|
安全 Java
Java基础&面向对象&继承&抽象类
Java基础&面向对象&继承&抽象类
|
1天前
|
Java
【Java基础】详解面向对象特性(诸如继承、重载、重写等等)
【Java基础】详解面向对象特性(诸如继承、重载、重写等等)
5 0
|
6天前
|
安全 Java 机器人
《Java 简易速速上手小册》第2章:面向对象的 Java(2024 最新版)
《Java 简易速速上手小册》第2章:面向对象的 Java(2024 最新版)
19 0
|
10天前
|
存储 Java
Java基础教程(7)-Java中的面向对象和类
【4月更文挑战第7天】Java是面向对象编程(OOP)语言,强调将事务抽象成对象。面向对象与面向过程的区别在于,前者通过对象间的交互解决问题,后者按步骤顺序执行。类是对象的模板,对象是类的实例。创建类使用`class`关键字,对象通过`new`运算符动态分配内存。方法包括构造函数和一般方法,构造函数用于对象初始化,一般方法处理逻辑。方法可以有0个或多个参数,可变参数用`类型...`定义。`this`关键字用于访问当前对象的属性。
|
13天前
|
存储 Java 编译器
对象的交响曲:深入理解Java面向对象的绝妙之处
对象的交响曲:深入理解Java面向对象的绝妙之处
46 0
对象的交响曲:深入理解Java面向对象的绝妙之处
|
1月前
|
算法 IDE Java
【软件设计师备考 专题 】面向对象程序设计语言:C++、Java、Visual Basic和Visual C++
【软件设计师备考 专题 】面向对象程序设计语言:C++、Java、Visual Basic和Visual C++
41 0
|
1月前
|
Java
java面向对象高级分层实例_测试类(main方法所在的类)
java面向对象高级分层实例_测试类(main方法所在的类)
10 1
|
1月前
|
Java 数据库
java面向对象高级分层实例_数据库操作类
java面向对象高级分层实例_数据库操作类
11 1
|
1月前
|
Java
java面向对象高级分层实例_BaseDao
java面向对象高级分层实例_BaseDao
13 1