【发布时间】:2012-08-31 23:34:47
【问题描述】:
我最近一直在深入研究 JavaScript 以完全理解该语言,并且有一些我似乎无法找到答案的烦人问题(特别是处理面向对象的编程)。
假设如下代码:
function TestObject()
{
this.fA = function()
{
// do stuff
}
this.fB = testB;
function testB()
{
// do stuff
}
}
TestObject.prototype = {
fC : function
{
// do stuff
}
}
函数fA和fB有什么区别?他们的行为范围和潜在能力是否完全相同?这只是惯例还是一种技术上更好或更合适的方式?
如果在任何给定时间只有一个对象的实例,那么在原型中添加一个函数,例如fC,是否值得?这样做有什么好处吗?只有在处理对象或继承的许多实例时,原型才真正有用吗?
从技术上讲,按照我上面的方式或每次调用TestObject.prototype.functionName = function(){} 向原型添加方法的“正确”方式是什么?
我希望让我的 JavaScript 代码尽可能简洁易读,但我也对该语言中对象的正确约定非常感兴趣。我来自 Java 和 PHP 背景,我试图不对 JavaScript 的工作方式做出任何假设,因为我知道基于原型的 JavaScript 是非常不同的。
【问题讨论】:
-
Javascript != 面向对象。正如您(正确地!)观察到的那样,Javascript 可以说是 更好 被描述为“原型”语言。强,强书推荐:Javascript, the Good Parts, Douglas Cockford。恕我直言...
-
好问题,问错地方了。你最好在programmers.stackexchange.com 中问这种问题
-
paulsm4:我明白这一点,为了完整起见,我也只是想从这个角度理解 JavaScript。并感谢您的书籍建议! @JeremyJStarcher:谢谢!老实说,我什至不知道它的存在。
-
@paulsm4 - 为什么 JavaScript 不是面向对象的?语言不必具有类和基于类的继承才能被视为 OO。
-
@KayoticSully 您不应该在 Stack Exchange 网站上发布相同的问题。选择一个站点并运行它。 “购物问题”是不受欢迎的。您还在这里发布了这个问题:programmers.stackexchange.com/questions/164029/…
标签: javascript oop function prototype