微信小程序 > 微信公开课 > 启用插件时,ObjectsetPrototypeOf被设为了错误的函数
微信小程序,微信公开课,启用插件时,ObjectsetPrototypeOf被设为了错误的函数

启用插件时,ObjectsetPrototypeOf被设为了错误的函数

2019-03-15 16:54:37

微信公开课小程序热门讨论关于「启用插件时,ObjectsetPrototypeOf被设为了错误的函数」的小程序开发问题
补充:启用插件时,ObjectsetPrototypeOf被设为了错误的函数
展开:当前Bug的表现1未使用插件时不会触发这个异常2使用插件时,全局的ObjectsetPrototypeOf会被覆写,并且覆写的方法没有按ecma262的定义返回第一个传参的值3在实际应用中,如果使用了babel提前编译代码,会有大量依赖于ObjectsetPrototypeOf的方法无法按预期执行,例如使用了继承语法的代码会由于https:githubcombabelbabelblob0859535bpackagesbabelhelperssrchelpersjsL517L546中读取的ObjectsetPrototypeOf的返回值变成undefined而抛出异常4该异常的根源可以排查到是在小程序的appservice__dev__WAServicejs中,经VSCodeFormatDocument反混淆后位于49084913行(不同的反混淆工具得出的具体的行数也不同),截图可参考:https:mediadiscordappnetattachments410768182102589454527489845140914178unknownpngWAServicejs49084913LObjectdefineProperty(oObject,setPrototypeOf,{value:function(e,t){e__proto__=t},configurable:!0})20181227补充:使用微信开发者工具的Devtools反混淆后位于60406045L预期表现ObjectsetPrototypeOf(o,p)应返回o具体可查阅:https:wwwecmainternationalorgecma26260secobjectsetprototypeofhttps:developermozillaorgzhCNdocsWebJavaScriptReferenceGlobal_ObjectsObjectsetPrototypeOfNoteshttps:githubcombabelbabelblob0859535bpackagesbabelhelperssrchelpersjsL444L452ObjectsetPrototypeOf(O,proto)WhenthesetPrototypeOffunctioniscalledwithargumentsOandproto,thefollowingstepsaretaken:1LetObeRequireObjectCoercible(O)2ReturnIfAbrupt(O)3IfType(proto)isneitherObjectnorNull,throwaTypeErrorexception4IfType(O)isnotObject,returnO5LetstatusbeO[[SetPrototypeOf]](proto)6ReturnIfAbrupt(status)7Ifstatusisfalse,throwaTypeErrorexception8ReturnO例如改为:function_setPrototypeOf(o,p){o__proto__=p;returno;}复现路径请使用下面的小程序代码片段复现提供一个最简复现Demo小程序代码片段:https:developersweixinqqcomsVWjLSXmb724n当appjson中去除了plugins时,测试用例通过;当appjson中包含plugins时,测试用例不通过20181227第一次更新有人处理吗这个问题的影响面很大,使用babel自行预编译代码的用户可能随时都会踩到这个雷我是tinajs和minawebpack的作者(社区里的用户大部分都会在项目中使用babel),昨天从一位用户反馈的情况排查到这个问题,相关的讨论可以在这里查阅:https:discordappcomchannels41076818210258945141076818210258945420181227第二次更新我更新了测试用例的代码片段:https:developersweixinqqcomszLmvOYmU7w4x通过在WAServicejs:formatted6042Line打断点(可搜索Object,快速找到这个位置),然后点击模拟器界面中的「测试」按钮,可以确认问题代码确实就出在这一函数即速小程序:感谢反馈在启用插件时,会激活基础库里面的一段插件处理逻辑这段逻辑里处理了setPrototypeOf方法,具体原因正在调查中
更多有关「启用插件时,ObjectsetPrototypeOf被设为了错误的函数」的讨论可以前往微信公开课小程序参与互动哦!
标签:微信公开课,小程序
微信小程序,微信公开课,启用插件时,ObjectsetPrototypeOf被设为了错误的函数

「启用插件时,ObjectsetPrototypeOf被设为了错误的函数」热门讨论订阅

方法1:微信扫描微信公开课小程序码即可订阅热门讨论「启用插件时,ObjectsetPrototypeOf被设为了错误的函数」

方法2:微信搜索微信公开课小程序名称进入,即可订阅热门讨论「启用插件时,ObjectsetPrototypeOf被设为了错误的函数」

方法3:微信网页访问即速商店,长按识别微信公开课小程序码即可订阅热门讨论「启用插件时,ObjectsetPrototypeOf被设为了错误的函数」

微信公开课小程序热门讨论「启用插件时,ObjectsetPrototypeOf被设为了错误的函数」由微信公开课原创摘录于微信小程序商店shop.jisuapp.cn,转载请注明出处。

微信公开课热门讨论「启用插件时,ObjectsetPrototypeOf被设为了错误的函数」由微信公开课开发者向微信用户提供,并对本服务内容、数据资料及其运营行为等真实性、合法性及有效性承担全部责任。