Continuing the discussion from Element.ancestorQuerySelector:
[quote=“stuartpb, post:1, topic:1065”]
// this would use a (non-live) NodeList, but there doesn't appear to be an API for that
```[/quote]
Despite all the standard interfaces that use NodeList, there is still no constructor for polyfills to use for *creating* a NodeList. There is also no way to determine if a NodeList is live, or to observe the changes that may occur to a live NodeList. I propose addressing these issues with the following extensions:
## NodeList.live
A boolean property that states whether a NodeList is live (reflecting document changes), something which is [currently not accessible to end developers](http://stackoverflow.com/questions/28163033/when-is-nodelist-live-and-when-is-it-static), leaving it unclear whether or not users can use its values without having to re-run a given query callback.
## new NodeList(nodes[, populator])
Returns a new NodeList from a given array of nodes. If the `populator` callback is specified, the NodeList is marked as `live`, and the callback receives two functions, `addNode` and `removeNode`. When the NodeList needs to be adjusted, these functions should be called, with a Node, NodeList (interpreted statically), or array of nodes to add or remove (respectively).
## NodeList.observe(callback[, acceptList]), NodeList.unobserve(callback)
Works similarly to `Object.observe` and MutationObserver on a live NodeList. Callbacks receive an object, similar to MutationRecord, with NodeLists at `addedNodes` and/or `removedNodes` describing changes to the NodeList.
If making NodeList inherit from Array is on the table (and, although it currently doesn't, I don't necessarily see any reason why it *couldn't*), this should maybe be reconsidered in favor of a general `Array.prototype.observe` - or, if Array chooses to go the same route as `Object.observe` where the observation function is a property of the *constructor* rather than the *prototype*, there would be no problem in the interim, since the `observe` property of Array subclasses wouldn't be affected.