【发布时间】:2015-12-17 22:43:46
【问题描述】:
我一直认为
的首选替代品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拥有它!任务完成。
【问题讨论】:
-
不,继承它的不是
MyObject,而是你要创建的所有new MyObject实例 -
或者换一种说法:
MyObject.prototype不是MyObject的原型(不是它继承的对象)。MyObject是一个构造函数,继承自Function.prototype- 所有函数的原型对象。 -
其实JavaScript继承模型比经典模型更高效。 MyObject 的每个实例都有一个指向 MyObject.prototype 的指针,可用于使用每个实例可以共享的方法(这样可以节省大量空间)。
标签: javascript oop prototype