>> How do you define "non-method"?
> 
> A function that is not invoked as method. Right now, the same kind of 
> construct is used for both true functions and methods. I’m proposing a new 
> construct (similar to the distinction that Python makes): a function that 
> does not have an implicit |this| parameter.

Hm, you've lost me... Your proposal seems to have several possible 
interpretations:

a) A compile-time error at the definition site for a function that will ever be 
invoked as a function. This requires the ability to predict the future, which 
turns out to be kinda hard. ;-P

b) A compile-time error at the definition site for a function that is not 
defined inside of an object. This would be way too restrictive; programmers 
rightfully use the ability to define a function and then put it into objects 
afterwards.

    function m(x, y, z) { ... this ... }
    obj1.m = obj2.m = m;

or even

    obj.m = function(x, y, z) { ... this ... }

c) At runtime, a function invoked as a non-method gets a |this|-binding of 
*undefined*. This is already the semantics of ES5 strict and therefore Harmony.

d) At runtime, a function invoked as a non-method gets a dynamic ReferenceError 
if it tries to refer to |this|. This would just be kind of obnoxious, I think, 
since if the function wants to test whether it's been called as a non-method it 
has to do something like

    let nonMethod = false;
    try { eval("this") } catch (e) { nonMethod = true }

That seems unfortunate.

Dave

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to