首頁>Program>source

我有一个具有某些屬性和方法的物件,如下所示:

{name: "FirstName",
age: "19",
load: function () {},
uniq: 0.5233059714082628}

,我必须將此物件傳遞给另一个函式.因此,我尝試使用JSON.stringify(obj),但是載入函式(当然不是空的,這只是出於本示例的目的)正在"丢失"。

有什麼办法可以 並反對並維護現有的方法?

谢谢!

stringify
最新回復
  • 5月前
    1 #

    為什麼要精確化物件? JSON不了解功能(並且不應该).如果要傳遞物件,為什麼不采用以下方法之一?

    var x = {name: "FirstName", age: "19", load: function () {alert('hai')}, uniq: 0.5233059714082628};
    function y(obj) {
        obj.load();
    }
    // works
    y({name: "FirstName", age: "19", load: function () {alert('hai')}, uniq: 0.5233059714082628});
    // "safer"
    y(({name: "FirstName", age: "19", load: function () {alert('hai')}, uniq: 0.5233059714082628}));
    // how it's supposed to be done
    y(x);
    

  • 5月前
    2 #

    有一種方法可以在JS中序列化一个函式,但是您必须在另一侧进行評估,並且它也將失去對其原始作用域的訪問.一種方法是:

    JSON.stringify(objWithFunction, function(key, val) {
      if (typeof val === 'function') {
        return val + ''; // implicitly `toString` it
      }
      return val;
    });
    

    尽管人们在這裏發佈了什麼內容,但是您要問的內容還是有合法用途的,但是,這一切都取決於您將使用此內容的目的.

  • 5月前
    3 #

    實際上,可以很容易地實現/解析javascript object with methods,這可能是一種更好的方法来處理您要執行的操作。

  • 5月前
    4 #

    看看 JSONfn 插入.

    http://www.eslinstructor.net/jsonfn/

    希望這会有所帮助。

    -Vadim

  • 5月前
    5 #

    我从来没有做過,但是值得一提的是,有一些方法可以對函式进行字元串化(即並非不可能)。

    請執行以下操作:

    var func = function(){console.log('logged')};
    var strFunc = func.toString();
    //then
    var parsedFunc = eval('('+strFunc+')');
    parsedFunc();
    //or simply
    eval('('+strFunc+')()');
    //or
    eval('('+strFunc+')')();
    //or
    eval('var anotherFunc='+strFunc);
    anotherFunc()
    

    上面帶有被覆盖的 toJSON() 可以實現浅化的字元串化功能;

    DISCLAIMER :在使用 eval()之前,請仔细阅讀本文和其他文章並做出自己的決定

  • 5月前
    6 #

    以下是我先前專案中使用的一些代碼,也许有用吗?

     // Similar to JSON.stringify(), with three major differences:
      // (1) It also wrap functions
      // (2) Upon execution, it expose an object, nl, into the scope
      // (3) Results are minified by 'uglify-js'
      var bundle = function(obj) {
        var type = typeof obj;
        if(type === 'string') return '\'' + obj + '\'';
        if(type === 'boolean' || type === 'number') return obj;
        if(type === 'function') return obj.toString();
        var ret = [];
        for(var prop in obj) {
          ret.push(prop + ': ' + bundle(obj[prop]));
        }
        return '{' + ret.join(',') + '}';
      };
      var ret = 'var nl = ' + bundle(nl);
      ret = require('uglify-js').minify(ret, {fromString: true}).code;
      fs.writeFileSync('nl.js', ret);
    

    使用此方法時的一个警告是,如果函式在外部閉包中使用任何东西,則將不起作用,即:... ... obj:{...,key:(function(){... var a = 10; ... return function(){...一些代碼使用'a'...})()}

  • python:Django模板無法迴圈defaultdict
  • android:ListFragment OnListItemClick没有被呼叫