2015-02-06 76 views
0

我遇到流星陣列的問題,其中流星正在向數組對象添加原始字段,儘管事實上我只添加了該對象。 我已經測試了這個流星以外,我的數組只有我傳遞它的字段。流星添加_proto_到數組

正常(非流星)代碼:

function coisa() { 
    var a = []; 

    b = []; 

    function test() { 
     c = []; 
     a.push(1, 2, 3); 
     b.push(4, 5, 6); 
     c.push(7, 8, 9); 
    } 

    function loggerA() { 
     return a; 
    } 

    function loggerB() { 
     return b; 
    } 

    function loggerC() { 
     return c; 
    } 

    test(); 

    console.log(loggerA()); 
    console.log(loggerB()); 
    console.log(loggerC()); 
} 
coisa(); 

流星代碼:

if (Meteor.isClient) { 
    Template.hello.rendered = function() { 
     var a = []; 

     b = []; 

     function test() { 
      c = []; 
      a.push(1, 2, 3); 
      b.push(4, 5, 6); 
      c.push(7, 8, 9); 
     } 

     function logger() { 
      console.log(a); 
      console.log(b); 
      console.log(c); 
     } 
/*  function loggerA() { 
      return a; 
     } 

     function loggerB() { 
      return b; 
     } 

     function loggerC() { 
      return c; 
     } 

     */ 

     test(); 
     logger(); 

//  console.log(loggerA()); 
//  console.log(loggerB()); 
//  console.log(loggerC()); 
    } 
} 

if (Meteor.isServer) { 
    Meteor.startup(function() { 
     // code to run on server at startup 
    }); 
} 

回答

1

沒有什麼錯,它的ECMA 6的一部分的JavaScript規範,因爲它的建成,爲在現代Web瀏覽器中找到。任何JavaScript對象都有一個__proto__對象,允許您放置在更改數組時可以繼承的屬性。

你可以閱讀更多關於它在這裏:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto

這是不應該以任何方式影響您的應用程序,它通常被忽略/當你遍歷你的對象不可見的,除非你明確地調用它。 __被添加到它的開始,所以它的侵擾性最小。

+0

但爲什麼它只顯示流星而不是常規代碼? – mesosteros 2015-02-07 01:56:39

+0

@mesosteros只要它的javascript,只要你在現代網絡瀏覽器下查看它就會在那裏。流星不會添加它,ES6預定義的JavaScript規範添加它。它只在調試器下可見。如果你使用'xxx .__ proto__'甚至在調試器外面調用它,你將能夠看到它的屬性。 – Akshat 2015-02-07 08:05:50

+0

@mesosteros請看看問題相同的問題,如這一個:http://stackoverflow.com/questions/8665446/where-does-proto-get-added-to-array – Akshat 2015-02-07 08:07:00