> I do not believe (Axel) that the spec's Reference internal type is helpful as 
> an externally-visible part of the language in any of this.

I believe you, I know nothing about how references are actually implemented. 
Python works like this:

    class Foo:
        def bar():
            pass

    $ f = Foo()
    $ f.bar
    <bound method Foo.bar of <__main__.Foo instance at 0x103e57950>>

It has always surprised me that JavaScript preserved `this` here:
    (new Date().toString)()   // (*)
But not here:
    (0, new Date().toString)()

Then I found out that spec-wise, (*) is very close to Python. But if 
implementations don’t have references then it’s also impossible to keep them 
around. One could produce a bound function whenever one evaluates a reference 
to a method, but I don’t know if it’s worth the trouble (performance and 
compatibility-wise).

If you picture a method invocation obj.foo() as a single construct (and not as 
first evaluating obj.foo and then applying the () operator) then things do make 
sense – evaluating obj.foo is a different thing and simply gives you back the 
function you put there. And, thankfully, with strict mode, things fail fast if 
you forget to bind() a method.

-- 
Dr. Axel Rauschmayer
a...@rauschma.de

home: rauschma.de
twitter: twitter.com/rauschma
blog: 2ality.com

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

Reply via email to