What about protocols?

> On 13 בפבר 2014, at 16:46, Kevin Smith <[email protected]> wrote:
> 
> I'm not sure to what extent this has been discussed previously, but I think 
> we should consider merging relationships and bind syntax.
> 
> The relationships strawman introduces two new built-in symbols:  @geti and 
> @seti.  I will instead use the more descriptive names:  `Symbol.referenceGet` 
> and `Symbol.referenceSet`.
> 
> The basic idea is that arbitrary objects can be used as the "referenced name" 
> in a Reference object.  When GetValue or PutValue is called on those kinds of 
> reference objects, behavior is delegated to the functions defined on the 
> "reference name" object at the appropriate symbol.  If the required method is 
> not defined on the name object, then an exception is thrown.
> 
> The operator "::" creates such a reference object.
> 
> The following code should illustrate the idea:
> 
>     Function.prototype[Symbol.referenceGet] = function(target) { return this 
> };
> 
>     Map.prototype[Symbol.referenceGet] = function(target) {
> 
>         while (target !== null) {
>     
>             if (this.has(target))
>                 return this.get(target);
>         
>             target = Object.getPrototypeOf(target);
>         }
>     
>         return void 0;
>     };
> 
>     Map.prototype[Symbol.referenceSet] = Map.prototype.set;
> 
>     // Using a Map as a set of internal fields:
>     var obj = {};
>     var field = new Map;
> 
>     obj::field = "value";
>     obj::field; // "value"
> 
>     // Using a function as an extension method:
>     function f() { return this.x; }
> 
>     obj.x = "abc";
>     obj::f(); // "abc";
> 
> 
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to