Object.prototype不支持选项[方法名称]

时间:2019-01-10 09:34:51

标签: javascript node.js

我正在使用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)
   }
 }

任何人都可以向我解释为什么?

1 个答案:

答案 0 :(得分:1)

  

“但是后端返回错误” ...“我用以下代码替换了代码,并且效果很好。”

区别在于第一个变体使const myComponent = new MyComponent() myComponent.functionIWantToCall() 属性可枚举。因此,将选项序列化的代码在发送到后端之前会以某种方式序列化allFalse属性。

请考虑以下代码片段,该代码片段伪造了可能的序列化,该序列化在第一种情况下会受到扩展对象原型的方式的影响。

allFalse