在学习jQuery的时候,我们经常会看到“工厂函数”这个概念,那么究竟什么是“工厂函数”呢?我们来看看概念,“所谓工厂函数,就是指这些内建函数都是类对象,当你调用他们时,实际上是创建了一个类实例”。意思就是当我调用这个函数,实际上是先利用类创建了一个对象,然后返回这个对象。由于Javascript本身不是严格的面向对象的语言(不包含类),实际上来说,Javascript并没有严格的“工厂函数”,但是在Javascript中,我们能利用函数模拟类。
我们首先通过新关键字创建了一个对象,obj就相当于对象的实例。我们通过类实例化了一个对象,然后给这个对象相应的属性,最后返回对象。我们可以通过调用这个函数来创建对象,这样的话,实际上工厂函数也很好理解了:
1,它是一个函数。
2,它用来创建对象。
3,它像工厂一样,“生产”出来的函数都是“标准件”(拥有同样的属性)
不学习函数和对象,你不可能成为一名JavaScript程序员,并且当他们一起使用时,是构建块,我们需要从一个称为组合(成分)的强大对象范例开始。今天我们来看一些惯用的模式,使用工厂函数来组成函数,对象和承诺。组合模式是将一批子对象组织为树形结构,一条顶层的命令会在操作树中所有的对象。当一个函数返回一个对象时,我们称之他为工厂函数(工厂函数)。
,,,让我们来看一个简单的例子。
函数createJelly () { 返回{ 类型:“果冻”, 颜色:红色的 独家新闻:3 }; }
下面我们通过一些实例给大家介绍。
,,,每次我们调用这个工厂函数,它将返回一个新的果冻(果冻)对象实例。要注意的重点是,我们不必在工厂函数名称前面加上创建,但它可以让其他人更清楚函数的意图。对于类型属性也是如此,但通常它可以帮助我们区分我们程序的对象只,,
<强>,,,1 .带参数的工厂函数强>
,,,像所有函数一样,我们可以通过参数来定义我们的工厂函数(冰淇淋冰淇淋),这可以用来改变返回对象的模型。
函数createIceCream(味道=跋悴荨?{ 返回{ 类型:“冰淇淋”, 独家新闻:3, 味道 } }
,,,理论上,您可以使用带有数百个参数的工厂函数来返回非常特使的深层嵌套对象,但正如我们将看到的,这根本不是组合的精髓。
,,,<强> 2。组合的工厂函数强>
,,,在一个工厂函数中定义另一个工厂函数,可以帮助我们把复杂的工厂函数拆分成更小的、可重用的碎片。
,,,例如,我们可以创建一个甜点(甜点)工厂函数,通过前面的果冻(果冻)和冰淇淋(冰淇淋)工厂函数来定义只,,,
函数createDessert () { 返回{ 类型:“甜点”, 碗:[ createJelly (), createIceCream () ] }; }
,,,我们可以组合工厂函数来构建任意复杂的对象,这不需要我们结合使用新的或。对象可以用有(具有)关系而不是是一个(是)来表示。也就是说,可以用组合而不是继承来实现只,,,
,,,例如,使用继承。
//有点* *甜点蛋糕*是*甜点 函数琐事(){ 甜点。应用(这个参数); } 琐事上。原型=Dessert.prototype;//或者 类蛋糕甜点{延伸 构造函数(){ 超级(); } }
,,我们可以用组合模式表达相同的意思。
//有点* *层果冻、奶油和奶油。它还* *浇头。//蛋糕*有*果冻层,奶酪层和奶油层,顶部还*有*装饰配料。 函数createTrifle () { 返回{ 类型:“蛋糕”, 层:[ createJelly (), createCustard (), createCream () ), 配料:createAlmonds () }; }
, <>强,,3 .异步的工厂函数强>
,,,并非所有工厂都会立即返回数据,例如,有些必须先获取数据。在这些情况下,我们可以返回承诺来定义工厂函数只,
函数getMeal (menuUrl) { 返回新的承诺((解决,拒绝)=比;{ fetch (menuUrl) 不要犹豫(结果=比;{ 解决({ 类型:“饭”, 课程:result.json () }); }) .catch(拒绝); }); }JavaScript中的工厂函数(推荐)