为了账号安全,请及时绑定邮箱和手机立即绑定

请各位大佬指点!Object.create()创建的对象使用原型上的方法无效

请各位大佬指点!Object.create()创建的对象使用原型上的方法无效

GCT1015 2019-11-03 09:24:55
代码如下:consthttp=require('http');constserver=http.createServer((req,res)=>{letr=Object.create(res);r.write('HHHHH');r.end('OK');});server.listen(5000,function(){console.log('Apprunning!');});之后发送请求就没有有响应了,而且:console.log(r.write);console.log(res.write);是一样的结果,r.write===res.write也为true。try{leto=Object.create(res);o.end('132','utf-8',()=>{console.log('ok,end')});res.write('123456');res.end('ok')}catch(e){console.error('Error:',e.message);}response的结果是123456ok,然后打出了‘ok,end’.
查看完整描述

2 回答

?
米脂

TA贡献1836条经验 获得超3个赞

其实我觉得这是个适合初学者的好问题,不过你没表述清楚你的意思是o和res的方法明明一样,为什么o却不能做res的事情这里要理解一个概念,js里的函数传参,如果传的是对象,那么传的就是对象的引用(地址),比如
functionadd(array){
array.push(4)
}
letarr=[1,2,3]
add(arr)
console.log(arr)//1,2,3,4
也就是说,你写在createServer函数里的这个res,是调用的人传给你的,你的res怎么变,外面的res也跟着变,这就比传统的return赋值方便的多。你现在建了一个新的对象o,在上面调用再多方法也是没有用的,因为调用你的人不知道你在里面干啥,他只关注传给你的那个res怎么变,结果你复制了个新的对象,没管res,res没变,服务器自然也没有反应。
                            
查看完整回答
反对 回复 2019-11-03
  • 2 回答
  • 0 关注
  • 505 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号