【问题标题】:Can I add a public function to objects in JavaScript? How?我可以向 JavaScript 中的对象添加公共函数吗?如何?
【发布时间】:2010-11-07 12:44:22
【问题描述】:

我确定我这个问题的措辞是错误的,但我不知道如何很好地解释它......

我有一个模糊的想法,我在某处读到我可以在 JavaScript 中向对象添加方法 - 我的意思是:

function Exclaimify(aString)
{ 
    return aString + "!";
}

var greeting = "Hello";
alert(greeting.Exclaimify()) // this shows "Hello!" in an alert box

这可能吗?如果是这样,我该怎么做?

【问题讨论】:

  • 两个快速cmets:(1)不需要String(this),你知道“this”是一个String,因为你在String.prototype函数中; (2) 不要在 Object.prototype 或 Array.prototype 中添加任何内容。如果你这样做了,你就不能再使用“for(var item in array)”语法了。
  • @John Kugelman:已修复,谢谢。
  • 请不要用您自己的答案来扩展您的问题。如果您觉得需要单独回答,请在下方发布您自己的回答。

标签: javascript prototype-programming


【解决方案1】:

分配给它,就像它是一个变量一样。然后你可以使用this。简单!

var obj = {foo: "bar"};

obj.someFunc = function()
{
    return this.foo;
}

效果很好...除了!呃,除了,不是在字符串上,它不受这种愚蠢的影响。 (它们是完全不可变的。)但是,还有另一种方法,即修改对象的“类”并在那里添加方法。我所说的“类”实际上是指“原型”。 JavaScript doesn't have classes, it has prototypes。修改String 原型的语法如下:

var greeting = "Hello";

String.prototype.Exclaimify = function()
{
    return this + "!";
}

alert(greeting.Exclaimify()) // this shows "Hello!" in an alert box

【讨论】:

  • 精彩——正是我所追求的。
【解决方案2】:

听起来您想使用称为monkey patching 的技术。该文章包含指向Duck Punching JavaScript - Metaprogramming with Prototype 的链接,可能会对您有所帮助。

【讨论】:

  • 谢谢。您的链接文章不如接受的答案简洁,但仍然存在。
  • 虽然这在理论上可以回答问题,it would be preferable 在这里包含答案的基本部分,并提供链接以供参考。
猜你喜欢
  • 2018-07-06
  • 2011-11-24
  • 2011-01-28
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多