Facebook的JS SDK最近开始使用更新的ES5 Javascript方法,例如Object.keys()
和[].map()
。它们仍然支持旧版浏览器,它具有接受原始对象的ES5()
函数,所需方法的名称以及任何参数。然后,如果本机方法不可用,它将运行本机方法或等效的JS方法。例如:
ES5(g.api.whitelist, 'forEach', true, function(ca) {
s[ca] = 1;
});
或顶级对象,
ES5('JSON', 'parse', false, r.responseText);
我怀疑这是预处理器的结果,FB的开发人员实际上正在编写更多内容
g.api.whitelist.forEach(function(ca) {
s[ca] = 1;
});
和
JSON.parse(r.responseText);
(可能还有更长的变量名称)
现在,假设我是正确的,有一个预处理器,ES5()函数和相关的预处理是一个开源项目还是内部的东西?如果它是内部的,那么FB的任何人都可以评论开源的可能性吗?这是我能发现非常有用的东西。
答案 0 :(得分:5)
我们确实使用预处理器(基于jspatch),它允许我们编写常规的ES5代码。 ES5
函数本身基本上是来自MDN和JSON3的polyfill的包装。
这不仅可以让我们编写ES5,而且还可以避免使用像Function#bind和JSON.stringify这样的错误实现。
在不久的将来可能会有一篇博文发布:)
编辑:博客文章现已结束 - http://fb.me/2lizHU15p
答案 1 :(得分:1)
搜索Facebook的开源github存储库并未显示任何ES5方法。我明确地检查并递归地抓了那些提到javascript的那些。因此,您所看到的内容似乎并未公开。我在其他任何地方都找不到它。
如果您需要向后兼容ES5,请查看此es5-shim
答案 2 :(得分:0)
http://connect.facebook.net/en_US/all.js
这是你想要的吗?它没有列出文件中的任何许可证,它似乎是自动生成的?https://github.com/facebook/connect-js/
?
这将指向“是”,许可证将是apache?