For each import to introduce a new global scope would be extraordinarily
costly. Unless you employ iframes or webworkers, it's true and normal that
there is only one global scope.
>> For me, this means:
>> 1) even though, I include a function anchor in
>> a custom elements prototype definition,
>> if the function definition is not contained
>> within an enclosing scope, its definition
>> is global and subject to global corruption.
This is an incorrect conclusion. Functions attached to a prototype are only
overridable on that prototype. They are not part of the global scope, by
definition.
Here are some possibilities:
(1)
<script>
Polymer('x-foo', {
// nobody can corrupt this function without reaching
// into x-foo's prototype on purpose
myFunction: function() {
}
});
<script>
(2)
<script>
// this function is global by normal JavaScript rules
// somebody could override this function
function MyFunction() {};
Polymer('x-foo', {
// nobody can override this function without reaching
// to x-foo's prototype on purpose; otherwise it continues to point
// to the function above no matter what happens to the symbol
// MyFunction in the global scope
myFunction: MyFunction
});
<script>
(3)
<script>
(function() {
// this function is private to this closure, nobody can touch it
function MyFunction() {};
Polymer('x-foo', {
// nobody can corrupt this function without reaching
// to x-foo's prototype on purpose
myFunction: MyFunction
});
})();
<script>
(4)
<script>
// this function is global by normal JavaScript rules
// somebody could override this function
function MyFunction() {};
Polymer('x-foo', {
// nobody can corrupt this function without reaching
// to x-foo's prototype on purpose
myFunction: function() {
// this will call whatever function is at global MyFunction,
// which could have been clobbered from what I expect
MyFunction();
}
});
<script>
HTH,
Scott
On Fri, Mar 28, 2014 at 10:02 AM, Just.A.Guy <[email protected]>wrote:
> What I was expecting:
> each function definition would be anchored within its owning document
> fragment.
> (in a way similar to the way CSS styles are encapsulated).
>
> What I found:
> all function definitions (script files and inline) are anchored in the
> main HTML DOM (document).
> even those brought in via IMPORTs, or as part of a custom element's
> TEMPLATE" definition.
>
> So if you have the same two versions of a function with the same name,
> the definition that
> gets used is the last one effectively defined.
>
> My test:
>
> 1) created a simple IMPORT_1 html file.
> a) it contains a button and a textarea.
> b) component ready listener routine
> connects a click listener to the button
> and defines the associated textarea element
> node as an attribute of the button element.
> c) the click event listener, obtains the location
> of the associated text area, passes this
> element to a function named "import_function"
> d) The IMPORT_FUNCTION, just adds a static
> text string to the end of the text area.
> e) all of the self-registration for "Polymer" was setup.
> 2) I duplicated the IMPORT_1.html file and
> called it IMPORT_2.html.
> I changed the text string in IMPORT_FUNCTION
> to indicated that it was coming for IMPORT_2's definition.
> 3) I created a main document
> a) it has the same button and text area as the custom
> element's template, with names changed not to
> collide with the other custom elements.
> only IMPORT_FUNCTION name was unchanged,
> but the text was changed to indicate it came from main
> document.
> b) just below the Main button/textarea I included
> calls to IMPORT-1 and IMPORT-2 element
> c) in the header section, the appropriate code to import
> the two custom elements was included.
> 4) ran the Main html document using Web-node to
> a chrome browser (ver 33).
> 5) When pressing each of the buttons, I received
> the same message telling me the IMPORT-2
> version of IMPORT_FUNCTION was being
> shared by all three sets of code.
>
> Test #2
> I modified IMPORT-1's template. I moved the
> click_event and IMPORT_FUNCTION into the
> template area of the custom element.
>
> Reran the test. This time, all text areas
> reported that IMPORT_FUNCTION was
> all the same but coming from IMPORT-1's
> definition.
>
>
> For me, this means:
> 1) even though, I include a function anchor in
> a custom elements prototype definition,
> if the function definition is not contained
> within an enclosing scope, its definition
> is global and subject to global corruption.
>
> Follow Polymer on Google+: plus.google.com/107187849809354688692
> ---
> You received this message because you are subscribed to the Google Groups
> "Polymer" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/polymer-dev/99035207-4f61-4716-ac9a-f420bd2b7ce8%40googlegroups.com<https://groups.google.com/d/msgid/polymer-dev/99035207-4f61-4716-ac9a-f420bd2b7ce8%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>
Follow Polymer on Google+: plus.google.com/107187849809354688692
---
You received this message because you are subscribed to the Google Groups
"Polymer" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/polymer-dev/CAHbmOLY-d5MF4As1ND%3DAaD6mfs8g5r9Zhk5%3DHkvOGeHU9Cg4Vw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.