28 lines
921 B
JavaScript
28 lines
921 B
JavaScript
|
"use strict";
|
||
|
|
||
|
var functionName = require("./function-name");
|
||
|
|
||
|
/**
|
||
|
* Returns a display name for a value from a constructor
|
||
|
*
|
||
|
* @param {object} value A value to examine
|
||
|
* @returns {(string|null)} A string or null
|
||
|
*/
|
||
|
function className(value) {
|
||
|
return (
|
||
|
(value.constructor && value.constructor.name) ||
|
||
|
// The next branch is for IE11 support only:
|
||
|
// Because the name property is not set on the prototype
|
||
|
// of the Function object, we finally try to grab the
|
||
|
// name from its definition. This will never be reached
|
||
|
// in node, so we are not able to test this properly.
|
||
|
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name
|
||
|
(typeof value.constructor === "function" &&
|
||
|
/* istanbul ignore next */
|
||
|
functionName(value.constructor)) ||
|
||
|
null
|
||
|
);
|
||
|
}
|
||
|
|
||
|
module.exports = className;
|