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;
 | |
| };
 |