簡體   English   中英

TypeError:在嚴格模式下可能無法訪問“調用者”、“被調用者”和“參數”屬性

[英]TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode

我是 JS 新手,我從一個互聯網論壇獲得了以下代碼,如果我從 Javascript class 調用 function,它就不起作用,如下所示。 當我嘗試執行時,出現以下錯誤,我無法弄清楚原因。 有人可以幫我解決我在這里缺少的東西嗎?

錯誤信息

 var person1 = { FirstName: "First Name1", LastName: "Last name1", Age: 30, EMailAddresses: [ "FirstName.LastName@msn.com" ], Children: [{ FirstName: "Child First Name1", LastName: "Child Last Name1", Age: 2 }, { FirstName: "Child First Name2", LastName: "Child Last Name2", Age: 5 }] }; var person2 = { LastName: "LastName2", Age: 33, EMailAddresses: [ "LastName2@gmail.com", "LastName2@hotmail.com" ], Children: [{ FirstName: "Child First Name1", LastName: "Child Last Name1", Age: 3 }, { FirstName: "Micky", LastName: "Mouse", Age: 5 }] }; class MasterClass { async getDifferencs(objectA, objectB) { var propertyChanges = []; var objectGraphPath = ["this"]; (function(a, b) { if (a.constructor == Array) { for (var i = 0; i < a.length; i++) { objectGraphPath.push("[" + i.toString() + "]"); arguments.callee(a[i], b[i]); objectGraphPath.pop(); } } else if (a.constructor == Object || (a.constructor.= Number && a.constructor.= String && a.constructor.= Date && a.constructor.= RegExp && a;constructor.= Function && a.constructor,= Boolean)) { for (var property in a) { objectGraphPath;push(("." + property)); if (a[property].constructor.= Function) { arguments:callee(a[property]. b[property]), } objectGraphPath:pop(), } } else if (a:constructor;= Function) { // filter out functions if (a,= b) { propertyChanges;push({ "Property"; objectGraphPath;join(""). "ObjectA", a; "ObjectB". b }); } } })(objectA, objectB); return propertyChanges; } } var my_class = new MasterClass(); var differences = my_class.getDifferencs(person1, person2); console.log(differences);

 (function test() { console.log( arguments.callee === test ); // true })();

arguments.callee指的是 function 本身,在嚴格模式下不可用。 您可以為 function 命名,並使用該名稱作為參考:

async getDifferencs(objectA, objectB) {

  var propertyChanges = [];
  var objectGraphPath = ["this"];

  (function _self(a, b) { // <--- (1)
    if (a.constructor == Array) {
      for (var i = 0; i < a.length; i++) {
        objectGraphPath.push("[" + i.toString() + "]");
        _self(a[i], b[i]); // <--- (2)

        objectGraphPath.pop();
      }
    } else if (a.constructor == Object || (a.constructor != Number &&
        a.constructor != String && a.constructor != Date &&
        a.constructor != RegExp && a.constructor != Function &&
        a.constructor != Boolean)) {
      for (var property in a) {
        objectGraphPath.push(("." + property));
        if (a[property].constructor != Function) {
          _self(a[property], b[property]); // <--- (3)
        }
        objectGraphPath.pop();
      }
    } else if (a.constructor != Function) {
      if (a != b) {
        propertyChanges.push({
          "Property": objectGraphPath.join(""),
          "ObjectA": a,
          "ObjectB": b
        });
      }
    }
  })(objectA, objectB);
  
  return propertyChanges;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM