我正在使用Object.prototype
在我的Web应用程序中扩展Object类,如下所示,但是后端返回错误,提示the options [allFalse] is not supported
let MongoClient = require('mongodb').MongoClient;
Object.prototype.allFalse = function() {
for (var i in this) {
if (i < 1) return;
if (this[i] === true) return false;
}
return true;
}
router.get('/getmongo', function(req, res) {
MongoClient.connect(process.env.DB_CONN, function(err, db) {
(bunch of codes here)
}
}
我用以下代码替换了代码,并且效果很好。
let MongoClient = require('mongodb').MongoClient;
Object.defineProperty(Object.prototype, 'allFalse', {
value : function() {
for (var i in this) {
if (i < 1) return;
if (this[i] === true) return false;
}
return true;
}
});
router.get('/getmongo', function(req, res) {
MongoClient.connect(process.env.DB_CONN, function(err, db) {
(bunch of codes here)
}
}
任何人都可以向我解释为什么?
答案 0 :(得分:1)
“但是后端返回错误” ...“我用以下代码替换了代码,并且效果很好。”
区别在于第一个变体使const myComponent = new MyComponent()
myComponent.functionIWantToCall()
属性可枚举。因此,将选项序列化的代码在发送到后端之前会以某种方式序列化allFalse属性。
请考虑以下代码片段,该代码片段伪造了可能的序列化,该序列化在第一种情况下会受到扩展对象原型的方式的影响。
allFalse