2020-01-28 13:08:03 +08:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
var functionName = require("./function-name");
|
|
|
|
|
2020-03-22 05:13:25 +08:00
|
|
|
/**
|
|
|
|
* 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) {
|
2020-01-28 13:08:03 +08:00
|
|
|
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
|
|
|
|
);
|
2020-03-22 05:13:25 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = className;
|