我正在为Element
创建一个函数,但我找不到一种正确的方法来将原型名称本身放入其中,这是我尝试过的方法,但我认为这不是最合适的方法,有什么更传统的方法可以将名称放入原型本身?
Element.prototype.getCssStyle = function getCssStyle(stylePropertyName) {
var protoName = Element.getCssStyle.name;
return protoName;
}
如果您的目标是获得字符串"getCsStyle"within the
getCsStylefunction, you'd do that by using
getCsSyle.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;
}