我一直认为这是
的首选替代品function MyObject ( ... )
{
this.MyFunction = function ( ... ) { ... }
// ...
}
是
function MyObject ( ... )
{
// ...
}
MyObject.prototype.MyFunction = function ( ... ) { ... }
我的理解是,在称为原型链的JavaScript层次结构的工作方式中,MyObject.prototype
是MyObject
派生的对象。用英语说,这就是
"通过赠送给我的祖先给我一个财产,然后我会 继承自。"
这似乎是一种非常模糊和低效的处理事情的方式。来自C#背景,我怎么看这就像有一个类
class SpecialString : String
{
}
并说
好的,我希望
SpecialString
拥有一个函数SpecialFunction
,所以 我将进入String
并给它public void SpecialString (...)
。现在SpecialString
拥有它!完成任务。
答案 0 :(得分:2)
好的,我希望
SpecialString
拥有一个函数SpecialFunction
,所以 我会进入String
并给它public void SpecialString (...)
。现在SpecialString
拥有它!完成任务。
完全没有!使用您的示例,这就像执行以下操作:
function MyObject ( ... )
{
// ...
}
Object.prototype.MyFunction = function ( ... ) { ... }
将方法添加到基础Object
,以便扩展您的自定义对象。
每个构造函数都有自己的prototype
对象,可以定义类类方法。
prototype
是定义可以在对象的所有实例之间共享的属性或方法的灵活方式,无需在每次创建新实例时重新声明和创建新的函数对象
答案 1 :(得分:0)
使用原型,该函数在所有实例之间共享。 没有原型,函数是重复的:每个类的实例都有一个函数实例(它不是真正的类,但你明白我的意思)。 你可以说原型上的函数声明比其他方式消耗更少的内存。两者都有一些优点,但原型方法更标准,并允许创建更接近C#类恕我直言的行为。