JS函数: 原型覆盖 vs 原型扩展

4
有时我会看到这样的 JavaScript 代码:

funciton MyClass () {
    // some initialization
}

MyClass.prototype = {
    constructor: MyClass,

    // other functions
}

覆盖函数原型的好处是什么,与只扩展原型相比如何?
function MyClass () {
    // some initialization
}

MyClass.prototype.doStuff = function () {
    // some code
}

在第一个示例(覆盖原型)中,我们必须手动指定构造函数,而在第二个示例中,构造函数将自动指向该函数。我认为第一个示例更好一些,因为我们不需要手动指定构造函数。
那么为什么有些人使用第一种方式呢?有什么优势吗?
谢谢。

我很久以前就有同样的疑问,但我认为它是一样的东西...我不知道...谢谢你的提问。这个问题会帮助很多其他人。 - HIRA THAKUR
1个回答

2
第一个示例将删除先前定义的任何原型(如果有)。第二种方法将使它们保持不变(包括构造函数引用),但是如果您有很多原型,则代码量可能会更大。
值得注意的是,如果覆盖原型对象,则不必指定构造函数引用,这仅是为了方便,并且很少被使用。
除此之外,区别只在语法上,解释为什么有些人更喜欢另一种方式就像解释为什么有些人喜欢用2或4个缩进空格一样 - 这只是编码风格而已。

但是如果没有指定构造函数引用,我将无法像这样执行:MyClass.prototype.constructor.call() 是正确的。 - kromol
@kromol 这与 MyClass.call() 完全相同 - 调用构造函数引用并不更加“正确”。 - David Hellsing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接