我正在ES5 中编写 ES Harmony Symbol
/的实现。Name
我将使用 name ,但我希望浏览器在它已经存在的情况下(在未来Symbol
的浏览器中)使用任何预先存在的它。Symbol
我希望我的代码严格符合 ES5 并且可移植到其他项目。
这是在 ES3/ES5 non-strict 中做我想做的事情的一种方法:
(function() {
// If Symbol already exists, we're done.
if(typeof Symbol != 'undefined') return;
// This becomes global because it wasn't declared with var
Symbol = function() {
// ...
};
})();
但是,它不是 ES5 严格兼容的,因为Symbol
没有明确定义。
实现此目的的其他方法将涉及访问window
对象 ( window.Symbol = ...
),但这也不好,因为我不希望我的代码假定它在浏览器环境中运行。
如何在 ES5 严格中做到这一点?