Poniższy kod ma być krótkim przykładem prostej konstrukcji obiektu wielokrotnego użytku. Jest to bardzo prosty, głęboki obiekt o jednym poziomie, umieść tyle rekwizytów i metod, ile chcesz, i po prostu je przypisz.Prawidłowe podejście do złożonego/zagnieżdżonego tworzenia obiektów JavaScript w innym obiekcie
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
}
Oto przykład takiego zastosowania:
var DesrVacSkC = someDesiredReusableType("could really help!",null, "mr. Bean", "my mini", "[email protected]")
//oh..almost forgot
DesrVacSkC.OrderTickets();
W tej wyobraźni obiektu, w rzeczywistości nie jest tak proste, jak ja nie używać w moim kodu, to działa jak jest (nie spróbować ten rzeczywisty, ponieważ jest to tylko przykład.)
Ale ta kolejna konfiguracja, która podobnie używa tego samego podejścia, jest nieco błędna.
To jest przykład dla obiektu, który udało mi się iw mgnieniu oka zaimplementować jako obiekt zagnieżdżony, używając dokładnie tego samego podejścia, co obiekt buggy, czego nie rozumiem, dlaczego zastosowali to samo podejście przeglądarka.
//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;
}
Ale następny, poniżej, nie jest, jak to brakuje odpowiedniego podejścia do inicjalizacji ownedFefCollCore
Uncaught TypeError: Cannot read property 'HElmTColl' of undefined
// ten jest ważny, że rozpoczęto jako bardzo dobry, dodając go do obiektu poniżej, aż do dodania członka ownedFefCollCore
.
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
Znalazłem następujące podejście w moich badaniach dla mniej podatnych konstrukcji podatnych na błędy, ale nawet ten nie naprawia błędu. I stwierdzono wśród niektórych innych, takich jak ten 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);
}
}
});
i last but not least, mój oryginalny kod (zaraz po próbie stworzenia go jako bazę/obiektu udostępnionego).
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;
}
'Repo':' this' at 'FeFDivWFldsColl: this.ownedFefCollCore.HElmTColl' Obiekt referencyjny' Repo', który nie jest w pełni zainicjalizowany, gdy właściwość 'FeFDivWFldsColl' jest ustawiona https://jsfiddle.net/f6ft1433/ – guest271314
@ guest271314 hej, tam 30k js-rep, wciąż go poprawiam, wyślę ci bin/skrzypce wkrótce z gigantycznym niepotrzebnym kodem (jako początek nowego podejścia -giant oznacza bezpieczne ...następnie rozebrać go do tego, co działa, aż nie działa, a następnie cofnąć o jeden krok wstecz (:, Wczoraj w jakiś sposób skopiowałem twój kod i tym razem to samo stało się z samym wywołaniem wywołanie c: wyślę nowości po sukcesie, dziękuję na teraz (prosimy o sprawdzenie i będę - może otworzyć CR StackExchange na tym poście) –