30 lines
791 B
JavaScript
30 lines
791 B
JavaScript
|
"use strict";
|
||
|
|
||
|
var d = require("d");
|
||
|
|
||
|
var create = Object.create, defineProperty = Object.defineProperty, objPrototype = Object.prototype;
|
||
|
|
||
|
var created = create(null);
|
||
|
module.exports = function (desc) {
|
||
|
var postfix = 0, name, ie11BugWorkaround;
|
||
|
while (created[desc + (postfix || "")]) ++postfix;
|
||
|
desc += postfix || "";
|
||
|
created[desc] = true;
|
||
|
name = "@@" + desc;
|
||
|
defineProperty(
|
||
|
objPrototype,
|
||
|
name,
|
||
|
d.gs(null, function (value) {
|
||
|
// For IE11 issue see:
|
||
|
// https://connect.microsoft.com/IE/feedbackdetail/view/1928508/
|
||
|
// ie11-broken-getters-on-dom-objects
|
||
|
// https://github.com/medikoo/es6-symbol/issues/12
|
||
|
if (ie11BugWorkaround) return;
|
||
|
ie11BugWorkaround = true;
|
||
|
defineProperty(this, name, d(value));
|
||
|
ie11BugWorkaround = false;
|
||
|
})
|
||
|
);
|
||
|
return name;
|
||
|
};
|