5

The following code is meant to be a short example for a simple construct of a reusable object. This is a very simple, one level depth object, put as many props and methods as you like and just assign them.

function someDesiredReusableType(optionally, pass, ctor, pars, here) {
   //core obj to return
  var DesiredTypeCrtor = {
              propSkiingLocation: "canada",
              OrderTickets: function(optionally){
                             var tryRoomWView = optionaly;
                             print(
                                  "Dear " + ctor +", your request for " +
                                  propSkiingLocation + " is now being processed: an " +
                                  tryRoomWView  + " request was notified, we understand you have " + pars + " for cross country transportation, confirmation email will be sent " + here + " as soon as we process your order. }
              } 
      };
 return DesiredTypeCrtor 
}

Here is an example of this use:

 var DesrVacSkC = someDesiredReusableType("could really help!",null, "mr. Bean", "my mini", "Fun@bbc.co.uk") 

//oh..almost forgot
DesrVacSkC.OrderTickets();

As this imaginative object, is actually not as simple as I did use in my code, it does work as is (didn't try this actual one, as it's just an example.)

But this next setup that is similarly using the same approach is buggy somewhat.

This is an example for an object I have successfully and in a blink of an eye implemented as a nested object using the exact same approach as the buggy object, which I do not understand why they Applied the not with same approach by the browser.

//this is an important one, a smart property / value holder I came up with and does work perfectly, as a nested member.

function Rprp(parVal) {
    var cretdprp = {

        propVal: parVal,
        propValAsint: parseInt(parVal)

    };
    return cretdprp;

}

But the next one, here below, does not, as it lacks the proper approach for the initialization of ownedFefCollCore

Uncaught TypeError: Cannot read property 'HElmTColl' of undefined

//this is an important one, that was started as a very good one, with adding it to the object below, up until I have added ownedFefCollCore member.

function CreateFileEditForm_Manager() {
//as i do usually base/inner/creator and a return obj
var Repo = {
    CsDataLocals:
               {

                GetCurLastfileId:Rprp($("#HLocModelData_LastFileId").val())

                 },
    FormFldNames:
                        { JRdrData_FileName: "JRdrData_FileName" },

    //this is my bugg ! with and without new keyword & as function or Object!!
    ownedFefCollCore: new FefCollCore(),

   //and this is the line that chrome get's is anger on --> all day long 
    FeFDivWFldsColl: this.ownedFefCollCore.HElmTColl,
    FeFDivWFlds_IdColl: this.ownedFefCollCore.HElmT_IdColl,
    FeFDivWFldsCollAdd: function (parId, parFefDivWrpDivflds) {
        this.ownedFefCollCore.CollAdd(parId, parFefDivWrpDivflds);
    },
       / ........

     //some more code was removed trying to keep it as short as possible
  }

 //fefa stands for fileRecord Edit Form , core just says nothing, is there to imply the 'thing' is to be shared between variation of instances from the base object

I found the following approach in my research for less error prone constructs, but even this one does not correct the bug. And it was found among some others, such as this Object.create()

var FefCore = JClassProto({
    initialize: function () {
        this.HElmTColl = new Array();//was originally [] ...             
    //i changed because i wanted to eliminate any doubt that it's one of the reasons my code is ... Somewhere undefined , now i know (pretty sure they might be little different but both are ok.) it's not it.
        this.HElmT_IdColl = new Array();
        this.CollAdd = function (parId, parHElmT) {
            this.HElmTColl.push(parHElmT);
            this.HElmT_IdColl.push(parId);
        }
        this.Coll_Remove = function (parHElmT) {
            this.HElmTColl.pop(parHElmT);
        }
        // this is the first move, if a new object(which is an element in the array) about to be created,
        // call this to make sure not exist for i create do
        this.ElmObjCanCreate = function (parId) {
            return this.getIndexOfValuInDivWFldsColl(parId) < 0;
        }
        this.HElmTColl_FindById = function (parId) {
            var collindexofCurFileReadyDivWrpFlds = this.getIndexOfValuInDivWFldsColl(parId);
            return this.HElmTColl[collindexofCurFileReadyDivWrpFlds];
        }

        this.getIndexOfValuInHElmTColl = function (parId) {
            return $.inArray(parId, this.HElmT_IdColl);
        }
    }
});

And last but not least, my original code (right after the attempt to create it as a base /shared object).

function FefCollCore() {
    this.Cr = {
        HElmTColl: new Array(),
        HElmT_IdColl: new Array(),
        CollAdd: function (parId, parHElmT) {
            this.HElmTColl.push(parHElmT);
            this.HElmT_IdColl.push(parId);
        },
        Coll_Remove: function (parHElmT) {
            this.HElmTColl.pop(parHElmT);
        },
        CollNeedCreate: function (parId) {
            return this.getIndexOfValuInDivWFldsColl(parId) < 0;
        },
        HElmTColl_FindById: function (parId) {
            var collindexofCurFileReadyDivWrpFlds = this.getIndexOfValuInDivWFldsColl(parId);
            return this.HElmTColl[collindexofCurFileReadyDivWrpFlds];
        },

        getIndexOfValuInHElmTColl: function (parId) {
            return $.inArray(parId, this.HElmT_IdColl);
        }
    };
    return this.Cr;

}
Peter O.
  • 32,158
  • 14
  • 82
  • 96
Avia Afer
  • 866
  • 2
  • 8
  • 29
  • `Repo` : `this` at `FeFDivWFldsColl: this.ownedFefCollCore.HElmTColl` references object `Repo` that is not fully initialized when property `FeFDivWFldsColl` is set https://jsfiddle.net/f6ft1433/ – guest271314 Mar 20 '16 at 05:01
  • @guest271314 hey there mr 30k js-rep , i am still refining it , i will send you a bin/fiddle shortly with a giant unnecessary code (as a start of new approach -giant means safe ...then strip it down to what is working untill it doesn't , then step one step back (: , any ways last night i did copy your code and this time the same thing happend with the call itself the call to c: i will send the news upon success, thanks for now (please be here to review and i will - might open a StackExchange CR on this post ) – Avia Afer Mar 20 '16 at 12:23

2 Answers2

1
   //and this is the line that chrome get's is anger on --> all day long 
    FeFDivWFldsColl: this.ownedFefCollCore.HElmTColl,

If interpret Question correctly, you could try to set FeFDivWFldsColl as a function that returns this.ownedFefCollCore.HElmTColl

var FefCore = function() {
  this.e = new Array();
  this.e.push(2);
}

function CreateFileEditForm_Manager() {
  var Repo = {
    a: 0,
    b: 1,
    c: new FefCore(),
    // set `FeFDivWFldsColl` value as a function
    d: function() {
      // `this.c` : `new FefCore()` , `this.c.e` : `new Array()`      
      return this.c.e
    }
  };
  return Repo
}

var Fef = new CreateFileEditForm_Manager();
console.log(Fef.d())
guest271314
  • 1
  • 15
  • 104
  • 177
  • hey thanks, first i say i will try it out, second, why bother with `new` when it seem that i call `var x = funcName()` ? – Avia Afer Mar 20 '16 at 04:28
  • @AviaAfer _" why bother with new when it seem that i call var x = funcName() ?"_ Tried to reproduce or closely replicate existing `js` pattern at Question at `ownedFefCollCore: new FefCollCore()` – guest271314 Mar 20 '16 at 04:30
  • function funcname(){ someprop: 1, someOther: "SomeVal"} (psuedo) , then var x= fiuncname() , then print x.someprop ->outputs proper vals though issue is in this case, is that it is shared and not new, such in `c#` static object rather new , and that is why it's not a "compile/or runtime error " but in our case and most other cases we need it as an instance which means that it's wrong bottom line , a human error in which google could not come in as a debugger and say hay dumb ass you have made a shared object did you mean new ? (; – Avia Afer Mar 20 '16 at 04:41
  • i just want to make it clear that this is the case , so did i described it more or less comparing it to any other (most if not all other typical oo language) static vs instance ? – Avia Afer Mar 20 '16 at 04:47
  • anyway it's a little out of scope here and i was really needing this answer to subjected question so thanks for your time and effort mr' guest27131430k – Avia Afer Mar 20 '16 at 04:50
  • are you free for 2 minutes ? – Avia Afer Mar 21 '16 at 11:33
  • i have made some changes in my own answer, yours is the source of my implementation but not all places... see the calls to new `LogObj` no "new" : `var lnobj1 = LogObj(params)` – Avia Afer Mar 21 '16 at 13:31
1

var cont = "...see console";
var DivEmptyhtml = document.createElement('div');
var elmst = document.createElement('style');
function stringcss (){
           return ".cssEmptyhtml{ \r\n\tmargin:auto; margin-top:10px; margin-bottom:20px;"+
             " text-align:center; top:10px;"+
           " width:40%;  padding: 5px; height: 100px; " +
           "background-color:rgb(96,116,243); "+
          "color: #B5fee8; "+
          "background-image:" +
          " linear-gradient(to right bottom, #2983bC 24%, #284a4b 77%);"+
          " box-shadow: 8px 10px 50px 20px rgb(55, 55, 55); "+
          " -webkit-border-radius:10px;border-radius:10px; }";
  }

//elmst.innerHTML = stringcss();
DivEmptyhtml.innerHTML = cont;
DivEmptyhtml.className = "cssEmptyhtml";
DivEmptyhtml.attributes["id"] ="DivEmptyhtml";
$("head").append(elmst);
$("body").append(DivEmptyhtml);
$(elmst).attr("id","elmst");
//$(".cssEmptyhtml").attr("style",stringcss());
$(elmst).text(stringcss());

var strS, strF, message;
var indx = 123;
var count = 135;
indx = ++count - 1;
var init = true;
//now me
var programSteps = 0;
var starting = "starting";


console.log(starting);

function Log(strLine) {


    var d = new Date,
      DS = d.getSeconds(),
      Dms = d.getMilliseconds().toString();

    console.log("[step#" + (++programSteps) + "] " + DS + "." + Dms.substring(0, 2) + "> " + strLine);



  }
  //...see console



function LogObj(p_type) {
  
  function Fnl_t_t() {
       this.obj = "\r\n\t\t";
  }
  function Fnl_5xt() {
       this.obj = "\r\n\t\t\t\t";
  }
  var obj = {
    doNewLineBold: function(boolPrint, value, value2, value3, value4) {
      var nlttcopy = this.backnl_t_t.obj;
      this._nl_t_t = lnobj1.backnl_5xt.obj+ "|========> [ " + value;
      this._nl_t_t += value2 != "" ? " " + value2 : "";
      this._nl_t_t += value3 != "" ? " " + value3 : "";
      this._nl_t_t += value4 != "" ? " " + value4 : "";
      this._nl_t_t += " ] <=============|" + nlttcopy;
      if (boolPrint) {
        Log(this._nl_t_t);
        return "";
      } else return this._nl_t_t;
    },
    doLineBold: function(boolPrint, value, value2, value3, value4) {
      var nlttcopy = this.backnl_t_t.obj;
      this._nl_t_t = "|========> [ " + value;
      this._nl_t_t += value2 != "" ? " " + value2 : "";
      this._nl_t_t += value3 != "" ? " " + value3 : "";
      this._nl_t_t += value4 != "" ? " " + value4 : "";
      this._nl_t_t += " ] <=============|" + nlttcopy;
      if (boolPrint) {
        Log(this._nl_t_t);
        return "";
      } else return this._nl_t_t;
    },
    _type: {
      val: p_type,
      formated: ""
    },

    doformatedHeader: function() {
      var splts = this._type.val.split(' ');
      for (var i = 0; i < splts.length; i++) {
        this._type.formated += splts[i] + this.ErowR;
      }

      return "|========> [     " + this._type.formated + 
        "     ] <=============|" + this.backnl_5xt.obj;

    },
    doformatedTail: function() {
      return this.backnl_5xt.obj + "|========> [ END_ " + this._type.formated + "_END] <=============|" + this.backnl_t_t.obj;
    },
    _nl_t_t: function() {
                      return "\r\n\t\t";
            },
    
    backnl_5xt: new Fnl_5xt(),
    
    backnl_t_t: new Fnl_t_t(),
    
    ErowR: ">",
    nlArowR : new Fnl_5xt().obj + ">"

  };
  return obj;
}

var lnobj1 = LogObj("listWcounter1() arr"); //create object #1
var lnobj2 = LogObj("listWcounter2() arr"); //make sure #2 is not a-copy

var header1 = lnobj1.doformatedHeader();
var Tail1 = lnobj1.doformatedTail();

var header2 = lnobj2.doformatedHeader();
var Tail2 = lnobj2.doformatedTail();

var nlarowR1 = lnobj1.backnl_5xt.obj + lnobj1.ErowR;
var nlarowR2 = lnobj2.backnl_t_t.obj + lnobj2.ErowR;

Log(header1 + lnobj1.ErowR + " starting1... " + nlarowR1 + " is init1 ok?, and  index1 is Ok?  " + indx + Tail1);
Log(header2 + lnobj2.ErowR + " starting2... " + nlarowR1 + " is init2 ok?, and  index2 is Ok?  " + indx + Tail2);
var newbold = lnobj1.doLineBold(0, "a", "b", "c", "d") + lnobj1.backnl_5xt.obj;
Log("newbold looks Like: " + newbold);
lnobj1.doLineBold(1, "A", "B", "C", "D");
lnobj1.doNewLineBold(1, "e", "f", "g", "h");
Log(lnobj1.nlArowR);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
Bergi
  • 630,263
  • 148
  • 957
  • 1,375
Avia Afer
  • 866
  • 2
  • 8
  • 29