tag:forum.selfhtml.org,2005:/self Javascript Objekt ansprechen – SELFHTML-Forum 2015-12-03T19:08:54Z https://forum.selfhtml.org/self/2015/dec/1/javascript-objekt-ansprechen/1656107#m1656107 hawkmaster1 2015-12-01T13:48:54Z 2015-12-01T13:48:54Z Javascript Objekt ansprechen <p>Hallo zusammen,</p> <p>ich tue mich ein wenig schwer mit unten stehenden JS code. Ich würde gerne wenn die Funktion "startScan()" aufgerufen wird den Inhalt von "destinationKind" herausbekommen. Wie ihr seht habe ich versucht dies mit var test = scanOptions.jobSetting.destinationSetting.addressbookDestinationSetting.destinationKind;</p> <p>Die Struktur und die JS Objekte verstehe ich nicht ganz. Ich schreibe mal hinter die jeweiligen Zeilen einen Kommentar so wie ich es verstehe.</p> <pre><code class="block language-js"><span class="token keyword">function</span> <span class="token function">startScan</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> scanOptions <span class="token operator">=</span> <span class="token function">createOptions</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token comment">//Hier wird die Variable scanOptions gefüllt durch die Funktion createOptions()</span> time <span class="token operator">=</span> <span class="token punctuation">(</span> <span class="token keyword">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getTime</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> upnum <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> scannedCount<span class="token punctuation">,</span> filename<span class="token punctuation">,</span> reqbody<span class="token punctuation">,</span> reqId<span class="token punctuation">,</span> splitdata<span class="token punctuation">,</span> uploadOptions<span class="token punctuation">,</span> folder<span class="token punctuation">,</span> reqServer<span class="token punctuation">;</span> <span class="token operator">...</span><span class="token punctuation">.</span> <span class="token keyword">var</span> test <span class="token operator">=</span> scanOptions<span class="token punctuation">.</span>jobSetting<span class="token punctuation">.</span>destinationSetting<span class="token punctuation">.</span>addressbookDestinationSetting<span class="token punctuation">.</span>destinationKind<span class="token punctuation">;</span> <span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">'die DESTINATION ist '</span> <span class="token operator">+</span> test<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">function</span> <span class="token function">createOptions</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> color <span class="token operator">=</span> <span class="token function">$</span><span class="token punctuation">(</span> <span class="token string">'input[name="color"]:checked'</span> <span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">val</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> destination <span class="token operator">=</span> <span class="token function">$</span><span class="token punctuation">(</span> <span class="token string">'input[name="destination"]:checked'</span> <span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">val</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> scanOptions <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token string-property property">"jobSetting"</span><span class="token operator">:</span><span class="token punctuation">{</span> <span class="token string-property property">"scanDevice"</span><span class="token operator">:</span> <span class="token string">"auto"</span><span class="token punctuation">,</span> <span class="token string-property property">"originalSide"</span><span class="token operator">:</span> originalSide<span class="token punctuation">,</span> <span class="token string-property property">"scanResolution"</span><span class="token operator">:</span> resolution<span class="token punctuation">,</span> <span class="token string-property property">"scanColor"</span><span class="token operator">:</span> color<span class="token punctuation">,</span> <span class="token string-property property">"fileSetting"</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> email<span class="token punctuation">,</span>destinationSetting<span class="token punctuation">;</span> <span class="token comment">//Hier wird doch vermutlich die variable "destinationSetting" initialisiert </span> <span class="token operator">...</span><span class="token punctuation">.</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> destination <span class="token operator">===</span> <span class="token string">"folder"</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> scanOptions<span class="token punctuation">.</span>jobSetting<span class="token punctuation">.</span>jobMode <span class="token operator">=</span> <span class="token string">"scan"</span><span class="token punctuation">;</span> scanOptions<span class="token punctuation">.</span>jobSetting<span class="token punctuation">.</span>destinationSetting <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">{</span> <span class="token string-property property">"destinationType"</span><span class="token operator">:</span> <span class="token string">"book"</span><span class="token punctuation">,</span> <span class="token string-property property">"addressbookDestinationSetting"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string-property property">"destinationKind"</span><span class="token operator">:</span> <span class="token string">"folder"</span><span class="token punctuation">,</span> <span class="token string-property property">"entryId"</span><span class="token operator">:</span> <span class="token function">$</span><span class="token punctuation">(</span> <span class="token string">'input[name="folder"]:checked'</span> <span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">val</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> scanOptions<span class="token punctuation">.</span>jobSetting <span class="token operator">=</span> <span class="token function">createJobSetting</span><span class="token punctuation">(</span> scanOptions<span class="token punctuation">.</span>jobSetting<span class="token punctuation">,</span> capability <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span><span class="token punctuation">(</span> scanOptions <span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//Return wert als Objekt</span> <span class="token punctuation">}</span> </code></pre> <p>Mich würde also interessieren wie man später bei "startScan()" die Inhalte von "destinationKind" oder "entryId" bekommt?</p> <p>vielen Dank viele Grüße hawk</p> https://forum.selfhtml.org/self/2015/dec/1/javascript-objekt-ansprechen/1656114#m1656114 unknown 2015-12-01T14:34:39Z 2015-12-01T14:34:39Z Javascript Objekt ansprechen <blockquote> <p>Wie ihr seht habe ich versucht dies mit var test = scanOptions.jobSetting.destinationSetting.addressbookDestinationSetting.destinationKind;</p> </blockquote> <p>destinationSetting ist ein Array:</p> <blockquote> <pre><code> scanOptions.jobSetting.destinationSetting = [ { </code></pre> </blockquote> <p>was vermutlich nicht mal vorhanden sein mus. Du musst also dann prüfen ob destinationSetting überhaupt existiert, ob es ein Array ist und wieviele Arrayelemente vorhanden sind. Dann musst du noch wissen, auf welches (vielleicht auch alle) Element du zugreifen musst.</p> https://forum.selfhtml.org/self/2015/dec/1/javascript-objekt-ansprechen/1656115#m1656115 hawkmaster1 2015-12-01T14:40:12Z 2015-12-01T14:40:12Z Javascript Objekt ansprechen <p>Hallo,</p> <blockquote> <p>destinationSetting ist ein Array:</p> </blockquote> <p>ja ok, aber angenommen es ist befüllt wie spricht man dann den Inhalt an ? Also z.b. entryID ?</p> <p>Gruss</p> https://forum.selfhtml.org/self/2015/dec/1/javascript-objekt-ansprechen/1656124#m1656124 Felix Riesterer http://felix-riesterer.de 2015-12-01T16:38:17Z 2015-12-03T10:28:57Z Javascript Objekt ansprechen <p>Liebe(r) hawkmaster1,</p> <blockquote> <p>Hallo,</p> <blockquote> <p>destinationSetting ist ein Array:</p> <blockquote> <pre><code> scanOptions.jobSetting.destinationSetting = [ { </code></pre> </blockquote> </blockquote> <p>ja ok, aber angenommen es ist befüllt wie spricht man dann den Inhalt an ? Also z.b. entryID ?</p> </blockquote> <p>dieses Array, wenn es vorhanden ist, enthält laut Deinem Code genau ein Objekt:</p> <blockquote> <pre><code class="block language-js"> scanOptions<span class="token punctuation">.</span>jobSetting<span class="token punctuation">.</span>destinationSetting <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">{</span> <span class="token string-property property">"destinationType"</span><span class="token operator">:</span> <span class="token string">"book"</span><span class="token punctuation">,</span> <span class="token string-property property">"addressbookDestinationSetting"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string-property property">"destinationKind"</span><span class="token operator">:</span> <span class="token string">"folder"</span><span class="token punctuation">,</span> <span class="token string-property property">"entryId"</span><span class="token operator">:</span> <span class="token function">$</span><span class="token punctuation">(</span> <span class="token string">'input[name="folder"]:checked'</span> <span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">val</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> </code></pre> </blockquote> <p>Dieses Objekt kann als erstes Array-Element so erreicht werden:</p> <pre><code class="block language-javascript"><span class="token keyword">if</span> <span class="token punctuation">(</span>scanOptions<span class="token punctuation">.</span>jobSetting<span class="token punctuation">.</span>destinationSetting instance <span class="token keyword">of</span> Array <span class="token operator">&&</span> scanOptions<span class="token punctuation">.</span>jobSetting<span class="token punctuation">.</span>destinationSetting<span class="token punctuation">.</span>length <span class="token operator">></span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// ...</span> <span class="token punctuation">}</span> </code></pre> <p>Obiger Code prüft, ob scanOptions.jobSetting.destinationSetting tatsächlich ein Array ist, und ob das Array mindestens ein Element enthält.</p> <p>Nun kann man das Objekt mit dem Array-Index 0 ansprechen:</p> <pre><code class="block language-javascript"><span class="token keyword">if</span> <span class="token punctuation">(</span>scanOptions<span class="token punctuation">.</span>jobSetting<span class="token punctuation">.</span>destinationSetting instance <span class="token keyword">of</span> Array <span class="token operator">&&</span> scanOptions<span class="token punctuation">.</span>jobSetting<span class="token punctuation">.</span>destinationSetting<span class="token punctuation">.</span>length <span class="token operator">></span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> dS <span class="token operator">=</span> scanOptions<span class="token punctuation">.</span>jobSetting<span class="token punctuation">.</span>destinationSetting<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span> console<span class="token punctuation">.</span><span class="token function">dir</span><span class="token punctuation">(</span>dS<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// debug-Ausgabe der Objektstruktur auf der JS-Konsole des Browsers</span> <span class="token punctuation">}</span> </code></pre> <p>Da in Deinem Code die Objekt-Struktur genau eine Eigenschaft "destinationType" mit String-Wert und eine Eigenschaft "addressbookDestinationSetting" mit Objekt-Wert kennt, kannst Du diese nun direkt ansprechen:</p> <pre><code class="block language-javascript"><span class="token keyword">if</span> <span class="token punctuation">(</span>scanOptions<span class="token punctuation">.</span>jobSetting<span class="token punctuation">.</span>destinationSetting instance <span class="token keyword">of</span> Array <span class="token operator">&&</span> scanOptions<span class="token punctuation">.</span>jobSetting<span class="token punctuation">.</span>destinationSetting<span class="token punctuation">.</span>length <span class="token operator">></span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// short form for easier reading</span> <span class="token keyword">var</span> dS <span class="token operator">=</span> scanOptions<span class="token punctuation">.</span>jobSetting<span class="token punctuation">.</span>destinationSetting<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// dS.destinationType (string)</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">"destinationType: "</span> <span class="token operator">+</span> dS<span class="token punctuation">.</span>destinationType<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// dS.addressbookDestinationSetting (object)</span> console<span class="token punctuation">.</span><span class="token function">dir</span><span class="token punctuation">(</span>dS<span class="token punctuation">.</span>addressbookDestinationSetting<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// properties of dS.addressbookDestinationSetting</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">"destinationKind: "</span> <span class="token operator">+</span> dS<span class="token punctuation">.</span>addressbookDestinationSetting<span class="token punctuation">.</span>destinationKind<span class="token punctuation">)</span><span class="token punctuation">;</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">"entryId: "</span> <span class="token operator">+</span> dS<span class="token punctuation">.</span>addressbookDestinationSetting<span class="token punctuation">.</span>entryId<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>Liebe Grüße,</p> <p>Felix Riesterer.</p> https://forum.selfhtml.org/self/2015/dec/1/javascript-objekt-ansprechen/1656246#m1656246 hawkmaster1 2015-12-03T10:28:39Z 2015-12-03T10:28:39Z Danke <p>Lieber Felix,</p> <p>ganz herzlichen Dank für deine Mühe und für die tolle Erklärung. Jetzt ist mir das mit den Eigenschaften und Objekten ein wenig verständlicher geworden :-)</p> <p>Gruss hawk</p> https://forum.selfhtml.org/self/2015/dec/1/javascript-objekt-ansprechen/1656321#m1656321 Felix Riesterer http://felix-riesterer.de 2015-12-03T19:08:54Z 2015-12-03T19:08:54Z instanceof - nicht "instance of" <p>Mein lieber Felix,</p> <p>also was verzapfst Du denn da für einen Quark?!</p> <blockquote> <p>if (scanOptions.jobSetting.destinationSetting instance of Array</p> </blockquote> <p>der Operator heißt "instanceof", und zwar ohne Leerzeichen!</p> <pre><code class="block language-javascript"><span class="token keyword">if</span> <span class="token punctuation">(</span>scanOptions<span class="token punctuation">.</span>jobSetting<span class="token punctuation">.</span>destinationSetting <span class="token keyword">instanceof</span> <span class="token class-name">Array</span> <span class="token operator">&&</span> scanOptions<span class="token punctuation">.</span>jobSetting<span class="token punctuation">.</span>destinationSetting<span class="token punctuation">.</span>length <span class="token operator">></span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// weiter geht's</span> <span class="token punctuation">}</span> </code></pre> <p>Jetzt sieht der Operator auch farblich anders aus. So ist es also richtig.</p> <p>Liebe Grüße,</p> <p>Felix Riesterer.</p>