彩世界开奖app官网-彩世界平台官方网址(彩票平台)
做最好的网站
来自 彩世界平台官方网址 2019-11-28 05:41 的文章
当前位置: 彩世界开奖app官网 > 彩世界平台官方网址 > 正文

Javascript面向对象设计生机勃勃 工厂方式_js面向对

1、工厂模式抽象了创建具体对象的过程,但是在ECMAScript中无法创建类,所以就使用一种函数来封装以特定接口创建对象的细节。以一下情况为例, 有一个员工类,有姓名、年龄、职位属性, 复制代码 代码如下:function CreateEmployee { var Emp = new Object(); Emp.name = name; Emp.age = age; Emp.job = job; Emp.sayName = function ; }; return Emp; } 使用以上方法定义两个员工,Jim,Sun 复制代码 代码如下: var Jim = CreateEmployee("jim", 22, "SoftWare Engineer"); var Sun = CreateEmployee; 然后分别使用SayName方法,让两位员工报上名来 复制代码 代码如下: Jim.sayName; 函数CreateEmployee可以根据参数来构建一个包含必要信息的Employee对象,可以无限次的调用这个函数。工厂模式虽然解决了创建多个相似对象的问题,但是却没有解决怎样知道一个对象类型的问题。

这样就解决了两个函数做同一件事情的问题,但是新的问题又会出现了,这个在全局作用域中定义的函数,实际上只能被某个对象引用,而且最要命的问题是,如果对象需要定义很多方法,那么就需要定义很多个全局函数,所以这个自定义的引用类型,就没有任何封装性可言了.

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();

复制代码 代码如下:

//在另一个对象的作用域中调用
var o = new Object();
Employee.call(o, "Sun", 28, "SoftWare Engineer");
o.sayName();//Sum

alert(Jim instanceof Object); //true
alert(Sun instanceof Object);//true

复制代码 代码如下:

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

复制代码 代码如下: function Employee(name, age, job) { this.name = name; this.age = age; this.job = job; this...

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

构造函数的问题
使用构造函数的主要问题就是都要在每个实力上重新创建一遍,以上两个对象中的sayName方法其实是不同的Function的实例,可以用如下方法证明:
alert(Jim.sayName == Sun.sayName);//false
但是创建两个完成同样任务的Function实例,所以我们对上面的函数进行改写,如下

alert(Jim instanceof Employee); //true
alert(Sun instanceof Employee);//true

复制代码 代码如下:

在以上代码中Employee函数取代了CreateEmployee函数,Employee中的代码与CreateEmployee中的代码不同如下:
没有显示的创建对象
直接将属性和方法赋给了this对象
没有return语句
要创建Employee类的新实例,必须使用new操作符,实际会经历四个步骤:
创建一个新对象
将构造函数的作用域赋给新的对象
执行构造函数中代码
返回新对象
以上代码最后Jim和Sun中分别保存着Employee的两个不同实例,这两个实例都有一个constructor(构造函数)属性,该属性指向Employee,可以做如下测试

复制代码 代码如下:

复制代码 代码如下:

创建自定义的构造函数意味着将来可以把它的实例标石为一种特定的类型,而这也正是构造函数模式胜过工厂模式的地方。
下面详细讲解一下构造函数:
将构造函数当做函数
构造函数与其他函数的唯一区别就在于调用它们的方式不同。但是构造函数也是函数,不存在定义构造函数的特殊语法。其实,任何函数,只有通过new来调用,那他就可以作为构造函数,例如,Employee除了以上用new方法调用外,还可以用如下方式来调用。

同时这两个对象又都是Object类型的,可通过如下代码检测。

复制代码 代码如下:

我们将使用构造函数模式将工厂模式进行改写。

本文由彩世界开奖app官网发布于彩世界平台官方网址,转载请注明出处:Javascript面向对象设计生机勃勃 工厂方式_js面向对

关键词: 脚本 工厂 之家 面向对象