【问题标题】:Possibility of extending function-prototype扩展功能原型的可能性
【发布时间】:2018-10-07 18:03:09
【问题描述】:

是否可以扩展“myfunction”的函数原型 - 无需操作 Function.prototype - 就像扩展对象原型 (myfunction.prototype.method = function(){}) 一样?

亲切的问候

【问题讨论】:

  • “有可能吗”?试试看:)。
  • @HereticMonkey :-D
  • 扩展一个javascript对象的内置原型会导致原型污染
  • 感谢您的回答。但是可以通过 myfunction.prototype.funnyfunction = function(){} 创建一个构造函数“myfunction”并为其原型对象添加方法。所以我的问题是:是否可以以类似的方式扩展原型函数 - 无需操作 Function.prototype?
  • 你指的是static methods吗?

标签: javascript


【解决方案1】:

是的,我们可以扩展函数原型。每个 javascript 函数都继承自内置的 Javascript Function 对象,因此是 Function 对象的类型。 W3schools 示例:

function Person(first, last, age, eyecolor) {
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eyecolor;
}
Person.prototype.name = function() {
    return this.firstName + " " + this.lastName;
};

W3schools link MDN Link Function

注意:永远不要修改任何 javascript 对象的默认原型。

【讨论】:

  • 感谢您的回答。我以为 Person.prototype.name = function(){} 扩展了 Person 的 object.prototype 而不是 function.prototype?
  • 你说得对。将 Person 视为一种 Function 对象,它继承了 Function 对象的所有默认原型,我们还可以在其原型中添加属性和方法。内置的 Function.prototype 无法修改。
【解决方案2】:

关于原生功能,JavaScript 在其核心深处有prototype。虽然不清楚,但您可以在 Native Prototypes 上使用扩展,其中包括 Function 对象。

我建议这样做时要小心,因为这可能会导致意外的行为和副作用 - 就像每次更改“默认”、本机功能一样,例如 can be a bad idea

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 2012-05-10
    • 2012-10-23
    • 1970-01-01
    相关资源
    最近更新 更多