向JavaScript原型添加多个方法?

时间:2016-10-31 07:10:11

标签: javascript prototypal-inheritance prototype-programming

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

myObject.prototype = {

    init: function () {

    },

    runMe: function () {

    },

    removeItems: function () {

    }
}

这实际上是合法的吗,分别做每一个有什么区别,即

myObject.prototype.init = function () {}

myObject.prototype.runMe = function () {}

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

3 个答案:

答案 0 :(得分:4)

任何一种方法都可以,你应该选择哪种方法让你更容易做任何你正在做的事情。如果这是您修改原型的唯一地方,那么唯一有意义的区别是第一种方法默认消除了原型上的constructor属性。

因此,如果你覆盖整个prototype,你应该确保重新添加它的构造函数:

myObject.prototype = {

    init: function () {

    },

    runMe: function () {

    },

    removeItems: function () {

    },
    // right here
    constructor: myObject
}

答案 1 :(得分:2)

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

var doSomething = function() { return 1 };
doSomething.someProperty = "a";

请查看有关MDN Closures的文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures#Performance_considerations

答案 2 :(得分:0)

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

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

    init: function () {

    },

    runMe: function () {

    },

    removeItems: function () {

    }
}

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