[ 
https://issues.apache.org/jira/browse/COUCHDB-1300?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13118937#comment-13118937
 ] 

Filipe Manana commented on COUCHDB-1300:
----------------------------------------

Hi, there's a reason for that, and it's exactly the same reason why "foo 
instanceof Array" fails when foo is created in a browser iframe and the 
previous expression evaluated in another iframe which is accessing that array.

For couch, the user document is json decoded in one javascript context and the 
map function ran against the document is executed in another context (a 
sandbox). Each context has its own Array constructor.

                
> Array.prototype isn't working properly
> --------------------------------------
>
>                 Key: COUCHDB-1300
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-1300
>             Project: CouchDB
>          Issue Type: Bug
>          Components: JavaScript View Server
>    Affects Versions: 1.1
>         Environment: Ubuntu 11.04, node.couchapp, commonJS
>            Reporter: paul iannazzo
>              Labels: javascript, patch
>
> ##file helpers.js in views/lib/common
> const _ = require("views/lib/underscore");
> Array.prototype.compact = function(){return _.compact(this);};
> Array.prototype.flatten = function(){return _.flatten(this);};
> //this function is called from views.someName.map
> function commonProperties(doc){
>     arr = [];
>     arr = arr.compact();
>     log(arr);
>     log("is array?");
>     log(toString.call(doc.store.taxes));
>     log(doc.store.taxes);
>     //log(doc.store.taxes.compact());
>     log("is safe array?");
>     log(toString.call(safe.array(doc.store.taxes)));
>     log(safe.array(doc.store.taxes));
>    //log(safe.array(doc.store.taxes).compact());
>     log("array?");
>     log(toString.call(Array(safe.array(doc.store.taxes))));
>     log(Array(doc.store.taxes));
>     log(Array(doc.store.taxes).compact());
> ...
> ::LOG
> [info] [<0.3429.0>] OS Process #Port<0.5316> Log :: []
> [info] [<0.3429.0>] OS Process #Port<0.5316> Log :: is array?
> [info] [<0.3429.0>] OS Process #Port<0.5316> Log :: [object Array]
> [info] [<0.3429.0>] OS Process #Port<0.5316> Log :: 
> [{"taxId":0,"number":"000000","percent":8},{"taxId":1,"number":"","percent":5},{"taxId":2,"number":"","percent":1}]
> [info] [<0.3429.0>] OS Process #Port<0.5316> Log :: is safe array?
> [info] [<0.3429.0>] OS Process #Port<0.5316> Log :: [object Array]
> [info] [<0.3429.0>] OS Process #Port<0.5316> Log :: 
> [{"taxId":0,"number":"000000","percent":8},{"taxId":1,"number":"","percent":5},{"taxId":2,"number":"","percent":1}]
> [info] [<0.3429.0>] OS Process #Port<0.5316> Log :: array?
> [info] [<0.3429.0>] OS Process #Port<0.5316> Log :: [object Array]
> [info] [<0.3429.0>] OS Process #Port<0.5316> Log :: 
> [[{"taxId":0,"number":"000000","percent":8},{"taxId":1,"number":"","percent":5},{"taxId":2,"number":"","percent":1}]]
> the .compact() lines that are commented out cause errors:
> [info] [<0.3429.0>] OS Process #Port<0.5316> Log :: []
> [info] [<0.3429.0>] OS Process #Port<0.5316> Log :: is array?
> [info] [<0.3429.0>] OS Process #Port<0.5316> Log :: [object Array]
> [info] [<0.3429.0>] OS Process #Port<0.5316> Log :: 
> [{"taxId":0,"number":"000000","percent":8},{"taxId":1,"number":"","percent":5},{"taxId":2,"number":"","percent":1}]
> [info] [<0.3429.0>] OS Process #Port<0.5316> Log :: function raised exception 
> (new TypeError("doc.store.taxes.compact is not a function", "", 29)) with 
> doc._id RT7-RT7-31-20
> the first logs show that doc.store.taxes is an array, why do i need to use 
> Array() on it in order to use the prototype functions?

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to