向 JavaScript 原型添加多个方法?

Adding multiple methods to a JavaScript prototype?

我正在尝试找出将对象添加到原型的可能性和缺点,例如

myObject.prototype = {

    init: function () {

    },

    runMe: function () {

    },

    removeItems: function () {

    }
}

这真的合法吗,分别做每一个有什么区别,即

myObject.prototype.init = function () {}

myObject.prototype.runMe = function () {}

我尝试查找有关添加为对象的 MDN 文档,但找不到任何内容。任何人都可以评论推荐的方法吗?

这两种方法都可以,您应该选择能够更轻松地完成您正在做的任何事情的方法。如果这是您修改原型的唯一地方,那么唯一有意义的区别是第一种方法默认擦除原型上的 constructor 属性。

因此,如果您确实覆盖了整个 prototype,您应该确保重新添加其构造函数:

myObject.prototype = {

    init: function () {

    },

    runMe: function () {

    },

    removeItems: function () {

    },
    // right here
    constructor: myObject
}

另一种向对象原型添加多个函数的方法是这样的:

(function() {
    this.init = function () {

    };

    this.runMe = function () {

    };

    this.removeItems = function () {

    };
}).call(myObject.prototype);

查看来自 MDN 的闭包文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures#Performance_considerations

我会在一些 ES6 风格的帮助下这样做:

myObject.prototype = { ...myObject.prototype,

    init: function () {

    },

    runMe: function () {

    },

    removeItems: function () {

    }
}

简洁明了,您不必像使用@JLRishe 接受的答案那样担心覆盖任何内容。