向 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 接受的答案那样担心覆盖任何内容。
我正在尝试找出将对象添加到原型的可能性和缺点,例如
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 接受的答案那样担心覆盖任何内容。