Also I just realized that I have not mentioned it but I meant that new Point(0, 
0) would do following:

var point = Object.create(Point);
var value = Function.apply.call(point, arguments);
return typeof(value) === 'undefined' ? point : value;

Regards
--
Irakli Gozalishvili
Web: http://www.jeditoolkit.com/


On Tuesday, 2012-04-03 at 17:44 , Irakli Gozalishvili wrote:

>  
>  
> On Tuesday, 2012-04-03 at 13:47 , Axel Rauschmayer wrote:
>  
> > I think you should make the distinction between [[Call]] and [[Construct]]. 
> >  
> >  
> >  
>  
>  
> You can do it via (this insntanceof ..) already and dispatch to call / 
> construct if you want.  
>   
> > But both would be great to have for objects. It’s probably best to create 
> > importable names.
> >  
>  
> Importable names won't allow shorter than function form though, so I think 
> just () {} is better.  
>   
> > Then making the `new` operator available to object exemplars becomes indeed 
> > simple. For example:
> >  
> >     // Root object exemplar
> >     import Construct from somewhere;
> >     let ObjectExemplar = {
> >         [Construct](...args) {
> >             let inst = Object.create(this);
> >             let result = inst.init(...args);
> >             return (result === undefined ? inst : result);
> >         }
> >     }
> >  
> >  
> >  
> > On Apr 3, 2012, at 22:00 , Irakli Gozalishvili wrote:
> > > Hi,  
> > >  
> > > Please excuse me if this will sound too crazy, but this idea have being 
> > > growing in my head for so long that I can't stop myself from proposing it 
> > > here. I have experimented many different ways of doing inheritance in JS:
> > >  
> > > 1. Starting with a simple sugar that reduces machinery involved, similar 
> > > to backbone.js
> > > https://github.com/Gozala/extendables
> > >  
> > > 2. Finishing with class free prototypal inheritance
> > > https://github.com/Gozala/selfish
> > >  
> > > I have to say that experience with selfish turned out very interesting, 
> > > it made things so much simpler no special forms, no twisted relations 
> > > between constructors and objects, just a plain objects. Most of these 
> > > things are not obvious until you start using them, but the fact that 
> > > exemplars (classes) are no different from regular objects in the system 
> > > makes things much simpler.  
> > >  
> > > That being said I have also came to realize that in most of the cases 
> > > functions as exemplars would be a better feet than objects. As a matter 
> > > of fact if objects could be made callable I think it could could have 
> > > replaced most of the things that classes are targeting in more elegant 
> > > way.  
> > >  
> > > Here is more or less what I have in mind: https://gist.github.com/2295048
> > >  
> > > // class
> > > var Point = {
> > >   (x, y) {
> > >     this.getX = { () { return x; } }
> > >     this.getY = { () { return x; } }
> > >   }
> > >  
> > >   toString() {
> > >     return '<' + this.getX() + ',' + this.getY() + '>';
> > >   }
> > > }
> > >  
> > > var a = new Point(0, 0)
> > > var b = new Point(1, 7)
> > >  
> > > // Examples from class proposal
> > >  
> > > // extend is like create with a diff that second arg is an object.
> > > var SkinnedMesh = Object.extend(THREE.Mesh, {
> > >   (geometry, materials) {
> > >     // call the superclass constructor
> > >     THREE.Mesh.call(this, geometry, materials);
> > >      
> > >     // initialize instance properties
> > >     this.identityMatrix = new THREE.Matrix4();
> > >     this.bones = [];
> > >     this.boneMatrices = [];
> > >  
> > >     // ...
> > >   }
> > >  
> > >   update (camera) {
> > >     THREE.Mesh.update.call(this);
> > >   }
> > > });
> > >  
> > > Also such callable objects provide shorter alternative to current 
> > > function syntax:
> > > // shorter than function
> > >  
> > > numbers.
> > >   filter({ (x) { return x % 2 } }).
> > >   // maybe single expression can be even shorter like arrow functions ?
> > >   map({ (x) x * x }).
> > >   forEach({ (x) { this.add(x) } }, that);
> > >  
> > >  
> > > Also this would allow interesting APIs similar to those found in clojure:
> > >  
> > > // maps / sets similar like in clojure ?
> > > var map = WeakMap(), key = {}, value = {};
> > >  
> > > map.set(key, value);
> > > map(key) // => value
> > > key(map) // => value
> > >  
> > >  
> > > And maybe built-ins could have it for doing `[]` work:
> > >  
> > >  
> > > // Maybe even non-magical replacement for `[]`
> > >  
> > > [ 'a', 'b', 'c' ](1) // => 'b'
> > > ({ a: 1, b: 2 })('a') // => 1
> > > ('b')({ a: 1, b: 2 }) // => 2
> > >  
> > >  
> > >  
> > >  
> > > Regards
> > > --
> > > Irakli Gozalishvili
> > > Web: http://www.jeditoolkit.com/
> > >  
> > > _______________________________________________
> > > es-discuss mailing list
> > > [email protected] (mailto:[email protected])
> > > https://mail.mozilla.org/listinfo/es-discuss
> >  
> > --  
> > Dr. Axel Rauschmayer
> > [email protected] (mailto:[email protected])
> >  
> > home: rauschma.de (http://rauschma.de)twitter: twitter.com/rauschma 
> > (http://twitter.com/rauschma)
> > blog: 2ality.com (http://2ality.com)
> >  
> >  
> >  
> >  
> >  
> >  
> >  
> >  
> >  
> >  
> >  
> >  
> >  
> >  
> >  
> >  
> >  
> >  
>  

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to