如何在函数内部获取原型名称



我正在为Element创建一个函数,但我找不到一种正确的方法来将原型名称本身放入其中,这是我尝试过的方法,但我认为这不是最合适的方法,有什么更传统的方法可以将名称放入原型本身?


Element.prototype.getCssStyle = function getCssStyle(stylePropertyName) {
var protoName = Element.getCssStyle.name;

return protoName;
}

如果您的目标是获得字符串"getCsStyle"within thegetCsStylefunction, you'd do that by usinggetCsSyle.name`:

Element.prototype.getCssStyle = function getCssStyle(stylePropertyName) {
var functionName = getCssStyle.name;

return functionName;
}
console.log(document.createElement("div").getCssStyle());

函数的名称在引用该函数的函数中提供了一个作用域内标识符,并且函数的名称具有name属性。

或者从你指定的同一个地方拿到,Element.prototype.getCssStyle:

Element.prototype.getCssStyle = function getCssStyle(stylePropertyName) {
var functionName = Element.prototype.getCssStyle.name;

return functionName;
}
console.log(document.createElement("div").getCssStyle());

请注意,在这两种情况下,这都是函数的名称,而不一定是您将其分配给的属性。


附带说明:我强烈建议不要通过直接赋值在内置原型上创建方法。它在原型上创建了可枚举的属性,这可能会打乱天真编写的代码。

通常最好不要添加到内置原型中(当然也不要添加到代码中),但在您自己的应用程序或页面代码中也可以。要执行此操作,请使用Object.defineProperty

Object.defineProperty(Element.prototype, "getCssStyle", {
value: function getCssStyle(stylePropertyName) {
var functionName = getCssStyle.name;

return functionName;
},
enumerable: false,
configurable: true,
writable: true,
});
console.log(document.createElement("div").getCssStyle());

默认情况下,enumerable标志为false(所有三个标志都为false),但为了强调起见,我在上面包含了它。

arguments.callee引用函数本身。

Element.prototype.getCssStyle = function getCssStyle(stylePropertyName) {
var protoName = arguments.callee.name;
return protoName;
}

相关内容

  • 没有找到相关文章

最新更新