原型模式是JavaScript es6的23种设计模式中的创建型的一种设计模式。它允许创建对象的副本,同时又能高效地解决重复实例化过程中的性能问题。此模式基于一个简单的概念:复制一个已经存在的对象,调整其状态以满足新的需求,而不是通过构造函数创建新的对象。这样可以避免复杂的初始化过程,减少系统的开销。接下来我们就用泡茶的流程这一案例来探讨一下。
function Tea(type){ this.type=type console.log('您准备泡一杯'+this.type); } let IceRedTea=new Tea('冰红茶')在JS中,每当创建一个新函数,该函数都会自动获得一个名为prototype的属性,这个属性是一个对象,即所谓的原型对象。它通过原型链,所有对象实例可以共享同一份原型上的属性和方法!原型链是当试图访问一个对象的某个属性或方法时,当该对象没有该属性或方法时,JS会在其原型对象中查找,以此类推形成的一条链。
function Tea(type){ this.type=type console.log('您准备泡一杯'+this.type); } Tea.prototype.boilWater=function(){ console.log('把水煮沸'); } let IceRedTea=new Tea('冰红茶') IceRedTea.boilWater()在原型链中又有显示原型和隐式原型:显示原型用prototype属性查找原型;隐式原型用__proto__属性查找原型。
function Tea(type){ // 堆代码 duidaima.com this.type=type console.log('您准备泡一杯'+this.type); } Tea.prototype.boilWater=function(){ console.log('把水煮沸'); } let IceRedTea=new Tea('冰红茶') IceRedTea.boilWater() console.log(IceRedTea.__proto__) console.log(IceRedTea.__proto__===Tea.prototype)通过这些代码我们可能就能大致了解原型和原型链,接下来我们就通过以上内容来完成这个泡茶的过程吧。
function Tea(type){ this.type=type console.log('您准备泡一杯'+this.type); } // prototype 原型链 Tea.prototype.boilWater=function(){ console.log('把水煮沸'); } Tea.prototype.steepTeaBag=function(){ console.log('用沸水浸泡茶叶') } Tea.prototype.pourInCup=function(){ console.log('把茶水倒进杯子') } Tea.prototype.addLemon=function(){ console.log('加柠檬') } // 接口,模板方法接口 Tea.prototype.init=function(){ lemonTea.boilWater(); lemonTea.steepTeaBag(); lemonTea.pourInCup(); lemonTea.addLemon(); } var lemonTea=new Tea('柠檬茶') lemonTea.init();
其中我们封装了一个init函数用来美化我们的代码。以上是使用我们经典传统编程所完成的,接下来让我们再次来使用大模型来完成这个工作吧。
require('dotenv').config(); const OpenAI=require('openai') const client=new OpenAI({ apiKey:process.env.OPENAI_API_KEY, baseURL:'https://api.chatanywhere.tech/v1' }) const getChatResponse = async function(model,prompt,n){ const response = await client.chat.completions.create({ model:model, // 适合聊天的模型 有很多种 messages: [{ role : 'user', content : prompt }] }) return response.choices[0].message.content; } const main=async()=>{ // AIGC 的优势就是处理文本,生成内容 const text=` 泡一杯茶很容易。首先,需要把水烧开。 在等待期间,拿一个杯子并把茶包放进去。 一旦水开了,就把它倒在茶包上。 等待一会儿,让茶叶浸泡,几分钟后,取出茶包。 如果你愿意,可以加一些糖或牛奶调味。 就这样,您可以享受一杯美味的茶了。 ` const prompt=` 您将获得有三个引号括起来的文本。 如果它包含一系列的指令,则需要按照一下格式重新编写这些指令。 第一步-... 第二步-... ... 第N步-... 如果文本种不包含一系列的指令,则直接写“未提供步骤” """${text}""" ` const response=await getChatResponse('gpt-3.5-turbo',prompt); console.log(response); } main();
与经典传统编程一样能得到我们的结果。