我一直认为首选替代方案
function MyObject ( ... )
{
this.MyFunction = function ( ... ) { ... }
// ...
}
是
function MyObject ( ... )
{
// ...
}
MyObject.prototype.MyFunction = function ( ... ) { ... }
我的理解是,在称为原型(prototype)链的 JavaScript 层次结构的工作方式中,MyObject.prototype
是 MyObject
的对象得出。用英语来说,这句话的意思是
"Give me a property by giving it to my ancestor who I will then inherit it from."
这似乎是一种非常晦涩且低效的处理方式。来自 C# 背景,我认为这就像拥有一个类
class SpecialString : String
{
}
并说
Ok, I want
SpecialString
to have a functionSpecialFunction
, so I'll go intoString
and give itpublic void SpecialString (...)
. NowSpecialString
has it! Mission accomplished.
最佳答案
Ok, I want
SpecialString
to have a functionSpecialFunction
, so I'll go intoString
and give itpublic void SpecialString (...)
. NowSpecialString
has it! Mission accomplished.
一点也不!使用您的示例,这就像执行以下操作:
function MyObject ( ... )
{
// ...
}
Object.prototype.MyFunction = function ( ... ) { ... }
将该方法添加到基本对象
中,以便通过扩展您的自定义对象也拥有该方法。
每个构造函数都有自己的prototype
对象,可以在其中定义类似类的方法。
原型(prototype)是一种灵活的定义属性或方法的方式,可以在对象的所有实例之间共享,而无需在每次创建新的函数对象时重新声明和创建新的函数对象。实例已创建。
关于javascript - 在其原型(prototype)上定义对象属性的理由是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34345684/