There's LOTS of sites out there that still (unfortunately) do unsafe overwriting/overloading of the native's prototypes. For instance, just a few months ago, I ran across a site that was creating a Array.prototype.push() implementation that was incompatible with the standard implementation. When I injected jQuery onto that page, jQuery failed to work because Sizzle relies on being able to call push() with multiple parameters (something the page's .push() didn't handle). And there are many, many other examples, like adding String.prototype.trim(), etc.

The point? If everyone were in the habit of using sandboxable natives, like FuseBox provides, then that page could override it's version of Array all it wanted (even the native one), and my code, using Fuse.Array, would be perfectly safe.

Sandboxing a native-like object is just as much about preventing my changes from affecting others as it is about protecting myself from what others do.

Now, *can* I achieve the same thing without sandboxed natives? Of course. I can make fake data structure wrappers for every data type I care about. But I lose a lot of the semantics, operators, syntax-sugar of the actual natives. For instance, it's REALLY nice that a sandbox'd Array still lets me use the [] operator to access indices, etc. Is it perfect? No. But it's a LOT better than just choosing some custom namespace for my app and creating all new data structure wrappers. And in many cases, it's more efficient/performant, too.

To reiterate what John said earlier: The spirit of what FuseBox does doesn't require the mutability of the __proto__, but since at the moment there is no way to set the [[Prototype]]/[[Class]] of an object at creation time, __proto__ is the only option in some browsers (where iframe is buggy). If we can agree on something that allows such behavior at creation of an object, *including* Function objects (because I personally use a variation of FuseBox techniques to sandbox my functions), then __proto__ becomes unnecessary.

--Kyle



_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to