I think, if you were going to have this, it would be best if bound `this` were ignored, and if it were a syntax error for non-property references.
Reason being, you'd actually be able to tell what was going on, mostly, by reading the source code. Otherwise it's really hard to tell what's going on. A more interesting question could be super properties, since the appropriate receiver isn't the same as the object the method is looked up on ```js super .foo() .bar(); // overridden bar or superclass bar? ``` Dart has something like this, do they have weird rules about `this` to work around too? > On Oct 26, 2015, at 12:46 AM, Edwin Reynoso <[email protected]> wrote: > > `foo()#` this one it depends, how `foo` is defined > > if `foo` is defined in the `window` scope, it'll return the `window`: > > if not and just like this in another scope, it should most likely throw: > > ``` > (function() { > function foo() {}; > foo()# // throws > })(); > ``` > > `foo.bar.call(baz)#` would return `baz` because > > > (basically the `this` value of the method call) > > `baz.quux = foo.bind(bar)`, that's something that I'm not sure what's best, > so not sure, but because of what I said above I think the right answer would > be to return `bar` (the `this` value) > > `[].length#` will return the array > > `{ foo: 3 }.foo#` same thing as above, it'll return the object > >> On Mon, Oct 26, 2015 at 12:34 AM, Jordan Harband <[email protected]> wrote: >> This immediately raises some questions for me: >> - what would `foo()#` return? (a bare function call - the question applies >> to strict mode, and sloppy mode) >> - what would `foo.bar.call(baz)#` return? (foo? or baz?) >> - what would `baz.quux = foo.bind(bar); baz.quux()#` return? (baz? or bar?) >> - what would `[].length#` return? (an accessor property) (throw? the array? >> undefined?) >> - what would `{ foo: 3 }.foo#` return? (a data property) (throw? the >> object? undefined?) >> >>> On Sun, Oct 25, 2015 at 9:25 PM, Edwin Reynoso <[email protected]> wrote: >>> Could we get a way to basically to get the object back from after a method >>> was called, so that instead of this: >>> >>> ```JS >>> let obj = { >>> doSomething() { >>> // some side effect >>> return 5; >>> }, >>> doSomething2() { >>> // some other side effect >>> return {x: 5}; >>> } >>> } >>> >>> obj.doSomething(); >>> obj.doSomething2(); >>> ``` >>> >>> We could do this: >>> ``` >>> obj.doSomething()#doSomething2(); >>> ``` >>> >>> Where `#` gets the object that the method was called on (basically the >>> `this` value of the method call) >>> >>> Why? >>> >>> There are lots of methods that don't return anything (they return >>> `undefined` by default) and instead of retyping the same object we could >>> have `#` give us the object back. There's also methods that do return >>> something but I may not want that value: >>> >>> ``` >>> let arr = [1,2,3]; >>> arr.push(4).forEach(function() {...}); // throws because the push method >>> returns the length of the array >>> ``` >>> With `#` I could do: >>> >>> ``` >>> arr.push(4)#forEach(function() {...}); >>> ``` >>> >>> Ayy even `forEach` itself doesn't return, there's a >>> [discussion](https://esdiscuss.org/topic/return-value-of-foreach) on >>> changing that instead of breaking APIs which we can't we can have this: >>> >>> ``` >>> arr.push(4)#forEach(function() {...}); >>> ``` >>> >>> which won't require any API changes, and could be used on any function. >>> >>> Now I have no idea about implementation details, so not sure if this is >>> possible >>> >>> thoughts? >>> >>> _______________________________________________ >>> es-discuss mailing list >>> [email protected] >>> https://mail.mozilla.org/listinfo/es-discuss > > _______________________________________________ > es-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

