ugrás a tartalomhoz

EcmaScript 5 Object.create() Object.defineProperties

Ustak · 2011. Május. 23. (H), 13.38
Üdv mindenkinek, szerintem a kód magáért beszél :-). Hogy oldanátok meg egy hasonló öröklődést az új függvényekkel? Mit nézek el vajon?

//Items hierarchy - all visible (User Interface) items has some properties in common
var TIB = {};

/*
 *  TIB.ui.AbstractItem
 *  Parent of all Visible items
 *
 */


TIB.ui = {};
TIB.ui.AbstractItem = {
    id : null,
    DOM : {
       events: {},
       html : {
          wrapper : '<div class="tibitemwrapper" >'+
                        '<h3 class="ui-widget ui-widget-header ui-corner-all ui-border-all"></h3>'+
                        '<div class="tibitemcontainer ui-widget ui-widget-content ui-corner-all ui-border-all">'+
                        '</div>'+
                    '</div>',
          content : null,
          classname : "abstract"
           },
       style : {},
        },
    events : {},
    enabled : true,
    properties : {
        name : "TIB.ui.AbstractItem"
        },
    value : null
}


/*
 *  TIB.ui.AbstractTextItem
 *  Parent of all Visisible Items that has Text on it.
 *
 */

TIB.ui.AbstractTextItem = Object.create(TIB.ui.AbstractItem,{
    toString : { value : function() {
        return this.id+", "+this.properties.name+", "+this.properties.fontSize+", "+this.DOM.html.classname+", "+this.value;
        },
    },

    properties : {

        value : {
            name : "TIB.ui.AbstractTextItem",
            fontSize : "1em"
        }
    
    }
});

TIB.ui.TextArea = Object.create(TIB.ui.AbstractTextItem);
Object.defineProperties(TIB.ui.TextArea,{

    properties : {
        value :  {
            name : "TIB.ui.TextArea",
            fontSize : "2em"
        },
    },
    value : {
        value : "SzövegDoboz" 
    },


});
console.log(TIB.ui.AbstractTextItem.toString()); //classname : abstract
console.log(TIB.ui.TextArea.toString()); //classname abstract
TIB.ui.TextArea.DOM.html.classname = "textareaclassname";
console.log(TIB.ui.AbstractTextItem.toString()); //classname textareaclassname !!!!!
console.log(TIB.ui.TextArea.toString()); //classname textareaclassname

Köszi a véleményeket, üdv:
Gábor
 
1

Erre lyukadtam ki:

Ustak · 2011. Május. 23. (H), 16.09

"use strict";



//hopefully we have these implemented natively, but if not...

if (Object.defineProperty && Object.create) {
    if (!Object.defineProperties) {
        Object.defineProperties = function(obj, props) {
            for (var prop in props) {
                Object.defineProperty(obj,prop,props[prop]);
            }
        }
        console.log("Object.defineProperties function created");
    }
} else {
    alert("unsupported browser");
}



//Items hierarchy - all visible (User Interface) items has some properties in common
var TIB = {};

/*
 *  TIB.ui.AbstractItem
 *  Parent of all Visible items
 *
 */


TIB.ui = {};
TIB.ui.AbstractItem = {
    id : null,
    DOM_html_wrapper : '<div class="tibitemwrapper" >'+
                        '<h3 class="ui-widget ui-widget-header ui-corner-all ui-border-all"></h3>'+
                        '<div class="tibitemcontainer ui-widget ui-widget-content ui-corner-all ui-border-all">'+
                        '</div>'+
                    '</div>',
    DOM_html_content : null,
    DOM_html_classname : "abstract",
    DOM_html_style : null,
    DOM_html_events : {},
    events : {},
    enabled : true,
    properties_name : "TIB.ui.AbstractItem",
    value : null
}


/*
 *  TIB.ui.AbstractTextItem
 *  Parent of all Visisible Items that has Text on it.
 *
 */

TIB.ui.AbstractTextItem = Object.create(TIB.ui.AbstractItem,{
    toString : { value : function() {
        return this.id+", "+this.properties_name+", "+this.properties_fontsize+", "+this.DOM_html_classname+", "+this.value;
        },
    },

    properties_name : { value :  "TIB.ui.AbstractTextItem" },
    properties_fontsize : { value : "1em" }
    
});

TIB.ui.TextArea = Object.create(TIB.ui.AbstractTextItem);
Object.defineProperties(TIB.ui.TextArea,{

    properties_name :  { value : "TIB.ui.TextArea" },
    properties_fontsize :  { value : "2em" },
    value :  { value : "SzövegDoboz"  }

});
console.log(TIB.ui.AbstractTextItem.toString());
console.log(TIB.ui.TextArea.toString()); //abstract
TIB.ui.TextArea.DOM_html_classname = "textareaclassname";
console.log(TIB.ui.AbstractTextItem.toString()); //abstract
console.log(TIB.ui.TextArea.toString()); //textareaclassname

Úgy tűnik, rekurzívan kellene csinálni, de úgy meg félek túl sok az új object. Szerintem ennél maradok, furcsa de jó.
Persze várom a véleményeket :-)
Üdv:
Gábor
2

Kár hogy erre senki sem

bb0072 · 2011. Május. 24. (K), 10.23
Kár hogy erre senki sem tudott valami okosat mondani, mert érdekes a felvetett a probléma. FF-ben és Chrome-ban is ugyanez a helyzet, tehát nem valami bug-ról van szó egyik vagy másik böngészőben. Így elég nehézkesen használható ez az egész koncepció.