<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>pedant.dk &#187; javascript</title>
	<atom:link href="http://www.pedant.dk/category/coding/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pedant.dk</link>
	<description>Honesty in small things is not a small thing</description>
	<lastBuildDate>Thu, 05 Aug 2010 16:11:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>icanhas javascript OOP?</title>
		<link>http://www.pedant.dk/2009/12/12/icanhas-javascript-oop/</link>
		<comments>http://www.pedant.dk/2009/12/12/icanhas-javascript-oop/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 05:48:17 +0000</pubDate>
		<dc:creator>Jacob</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.pedant.dk/?p=724</guid>
		<description><![CDATA[In javascript we can express objects using the prototype notation: 

  var Cat = function () {
     this.furry = true;
  }
 Cat.prototype.greet = function () {
   return &#34;meeow&#34;;
 }

using class mimicking from prototype-js it would be :

 var Cat = new Class({
  initialize: function (){
  [...]]]></description>
			<content:encoded><![CDATA[<p>In javascript we can express objects using the prototype notation: </p>
<pre class="brush: jscript;">
  var Cat = function () {
     this.furry = true;
  }
 Cat.prototype.greet = function () {
   return &quot;meeow&quot;;
 }
</pre>
<p>using class mimicking from <a href="http://prototypejs.org/">prototype-js</a> it would be :</p>
<pre class="brush: jscript;">
 var Cat = new Class({
  initialize: function (){
    this.furry = true;
    },
  ask: function (item) {
   return &quot;icanhas &quot;+item+&quot; ?&quot;;
 });
</pre>
<p>This example should be pretty clear. But when we get into real-life application scenarios we need to interact with users and databases.</p>
<p>Let&#8217;s say we had a panel and a button for interacting with <a href="http://icanhascheezburger.com/2008/08/12/funny-pictures-i-fightz-dem/">lolcats</a>:</p>
<pre class="brush: jscript;">
var CatInformationPanel = Class.create({
   initialize: function (container) {
     $(container.id+'_furry').checked = true;
     $('petButton').observe('click',  this.ask.bindAsEventListener(this));
  },
  ask:  function (item) {
    $(container.id+'_text').value =&quot;icanhas &quot;+item+&quot; ?&quot;;
  }
});
</pre>
<p>Note that we need to bind &#8220;this&#8221; to the the function scope for &#8220;ask&#8221;. this is one of the intricacies of object oriented javascript. Here are <a href="http://alternateidea.com/blog/articles/2007/7/18/javascript-scope-and-binding">some badass ninja examples</a> to explain why.</p>
<p>Now, after interacting with user , you probably want to save the result to a database. let&#8217;s assume that you have a resource /lol/cat/questions you can issue a HTTP post to (you can create this using <a href="http://rubyonrails.org/">rubyonrails</a> or  something similar).</p>
<pre class="brush: jscript;">
var CatInformationPanel = Class.create({
   initialize: function (container,name) {
     this.name = name;
     $(container.id+'_furry').checked = true;
     $('petButton').observe('click',  this.ask.bindAsEventListener(this));
  },
  ask:  function (item) {
    var question = &quot;icanhas &quot;+item+&quot; ?&quot;
    $(container.id+'_text').value =question;
   var request = new Ajax.Request ({
      &quot;/lol/cat/question&quot;, {
        method:'post',
        params:{ name:name, question:question },
        onSuccess: function (json) {
           alert(&quot;saved question&quot;);
           }
     }
    });
  }
});
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.pedant.dk/2009/12/12/icanhas-javascript-oop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>openlayers 2.8 supports WFS-T</title>
		<link>http://www.pedant.dk/2009/09/02/openlayers-2-8-supports-wfs-t/</link>
		<comments>http://www.pedant.dk/2009/09/02/openlayers-2-8-supports-wfs-t/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 19:04:11 +0000</pubDate>
		<dc:creator>Jacob</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.pedant.dk/?p=590</guid>
		<description><![CDATA[if you are in a organisation where you store data with geographical information associated with it , then you have the option of sharing your data using the following standards specified by OGC:

WMS (Web map service)
WFS (Web feature service)

One way to leverage these standards is to use the geoserver project for data storage and the [...]]]></description>
			<content:encoded><![CDATA[<p>if you are in a organisation where you store data with geographical information associated with it , then you have the option of sharing your data using the following standards specified by<a href="http://www.opengeospatial.org/"> OGC</a>:</p>
<ul>
<li><a href="http://www.opengeospatial.org/standards/wms">WMS (Web map service)</a></li>
<li><a href="http://www.opengeospatial.org/standards/wfs">WFS (Web feature service)</a></li>
</ul>
<p>One way to leverage these standards is to use the <a title="geoserver" href="http://geoserver.org">geoserver project </a>for data storage and the <a href="http://openlayers.org/">openlayers project</a> web for showing and editing maps.<strong>update 2009-09-03</strong>: When integrating with the extjs framework , then it is worth using  the <a href="http://geoext.org">geoext project</a>. </p>
<p>An example snippet from geoserver shows the use of WFS-T for inserting geometric data with associated metadata for an alley in Tasmania. I&#8217;ll just bring it here:</p>
<p><code lang="xml"><br />
<wfs:Transaction service="WFS" version="1.0.0"<br />
  xmlns:wfs="http://www.opengis.net/wfs"<br />
  xmlns:topp="http://www.openplans.org/topp"<br />
  xmlns:gml="http://www.opengis.net/gml"<br />
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
  xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-transaction.xsd http://www.openplans.org/topp http://localhost:8080/geoserver/wfs/DescribeFeatureType?typename=topp:tasmania_roads"><br />
  <wfs:Insert><br />
    <topp:tasmania_roads><br />
      <topp:the_geom><br />
        <gml:MultiLineString srsName="http://www.opengis.net/gml/srs/epsg.xml#4326"><br />
          <gml:lineStringMember><br />
            <gml:LineString><br />
              <gml:coordinates decimal="." cs="," ts=" "><br />
494475.71056415,5433016.8189323 494982.70115662,5435041.95096618<br />
              </gml:coordinates><br />
            </gml:LineString><br />
          </gml:lineStringMember><br />
        </gml:MultiLineString><br />
      </topp:the_geom><br />
      <topp:TYPE>alley</topp:TYPE><br />
    </topp:tasmania_roads><br />
  </wfs:Insert><br />
</wfs:Transaction><br />
</code></p>
<p>Note that oracle has a well supported ways of extracting GML from spatial datatypes if you need to construct the wfs transactions yourself ( <a href="http://www.oracle.com/technology/sample_code/products/spatial/index.html">oracle locator</a>  )</p>
<p>At the first glance wfs can seem a bit complicated. Luckily openlayers has nice wrappings for it that is easily accessed from code  as shown in one of their examples running <a href="http://openlayers.org/dev/examples/wfs-t.html">here</a> :</p>
<p><code lang="javascript"><br />
 map = new OpenLayers.Map('map');<br />
            var wms = new OpenLayers.Layer.WMS(<br />
                "State",<br />
                "http://sigma.openplans.org/geoserver/wms",<br />
                {layers: 'topp:tasmania_state_boundaries'}<br />
            );<br />
            wfs = new OpenLayers.Layer.WFS(<br />
                "Cities",<br />
                "http://sigma.openplans.org/geoserver/wfs",<br />
                {typename: 'topp:tasmania_cities'},<br />
                {<br />
                    typename: "tasmania_cities",<br />
                    featureNS: "http://www.openplans.org/topp",<br />
                    extractAttributes: false,<br />
                    commitReport: function(str) {<br />
                        OpenLayers.Console.log(str);<br />
                    }<br />
                }<br />
            )<br />
            map.addLayers([wms, wfs]);<br />
            var panel = new OpenLayers.Control.Panel({<br />
                displayClass: "olControlEditingToolbar"<br />
            });</p>
<p>            var draw = new OpenLayers.Control.DrawFeature(<br />
                wfs, OpenLayers.Handler.Point,<br />
                {<br />
                    handlerOptions: {freehand: false, multi: true},<br />
                    displayClass: "olControlDrawFeaturePoint"<br />
                }<br />
            )<br />
            var save = new OpenLayers.Control.Button({<br />
                trigger: OpenLayers.Function.bind(wfs.commit, wfs),<br />
                displayClass: "olControlSaveFeatures"<br />
            });<br />
            panel.addControls([<br />
                new OpenLayers.Control.Navigation(),<br />
                save, draw<br />
            ]);<br />
            map.addControl(panel);<br />
            map.zoomToExtent(new OpenLayers.Bounds(140.64,-44.42,151.89,-38.80));<br />
        }<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pedant.dk/2009/09/02/openlayers-2-8-supports-wfs-t/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>closures -oh yeah?</title>
		<link>http://www.pedant.dk/2009/07/16/closures-oh-yeah/</link>
		<comments>http://www.pedant.dk/2009/07/16/closures-oh-yeah/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 09:09:42 +0000</pubDate>
		<dc:creator>Jacob</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.pedant.dk/?p=514</guid>
		<description><![CDATA[Hvad mon der sker her :

  var a=1;
  function foo() {
    var a;
   function bar() {
     a=2;
     return a;
   }
  return bar;
  }
  a=3;
  var b=foo();
  var c=b();
  alert(c);
  alert(a);

]]></description>
			<content:encoded><![CDATA[<p>Hvad mon der sker her :</p>
<p><code lang="javascript"><br />
  var a=1;<br />
  function foo() {<br />
    var a;<br />
   function bar() {<br />
     a=2;<br />
     return a;<br />
   }<br />
  return bar;<br />
  }</p>
<p>  a=3;<br />
  var b=foo();<br />
  var c=b();<br />
  alert(c);<br />
  alert(a);<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pedant.dk/2009/07/16/closures-oh-yeah/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>ext.data.writer og CRUD</title>
		<link>http://www.pedant.dk/2009/06/17/extdatawriter-og-crud/</link>
		<comments>http://www.pedant.dk/2009/06/17/extdatawriter-og-crud/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 00:41:40 +0000</pubDate>
		<dc:creator>Jacob</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.pedant.dk/?p=437</guid>
		<description><![CDATA[Jeg har kigget lidt nærmere på ext.data.writer og har delt nogle noter her :
 http://pedant.dk/archive/CRUD_in_extjs_3_0.pdf
Basalt set kan man nu på en nem måde foretage sig de fleste operationer man kunne forvente sig i en webapplikation der snakker med en database. Det er der jo sådan set ikke noget banebrydende i &#8211; nu kan man det [...]]]></description>
			<content:encoded><![CDATA[<p>Jeg har kigget lidt nærmere på ext.data.writer og har delt nogle noter her :</p>
<p><a title="CRUD i extjs 3.0" href="http://pedant.dk/archive/CRUD_in_extjs_3_0.pdf"> http://pedant.dk/archive/CRUD_in_extjs_3_0.pdf</a></p>
<p>Basalt set kan man nu på en nem måde foretage sig de fleste operationer man kunne forvente sig i en webapplikation der snakker med en database. Det er der jo sådan set ikke noget banebrydende i &#8211; nu kan man det også fra extjs . Jeg eksperimenterer i øjeblikket med hvordan man bruger denne nye funktionalitet nemmest &#8211; det gør jeg iøjeblikket i :</p>
<p><a title="YASE" href="http://github.com/jacobandresen/yase/tree/master">http://github.com/jacobandresen/yase/tree/master</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pedant.dk/2009/06/17/extdatawriter-og-crud/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lowpro og behaviour</title>
		<link>http://www.pedant.dk/2009/05/08/lowpro-og-behaviour/</link>
		<comments>http://www.pedant.dk/2009/05/08/lowpro-og-behaviour/#comments</comments>
		<pubDate>Fri, 08 May 2009 06:52:13 +0000</pubDate>
		<dc:creator>Jacob</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.pedant.dk/?p=404</guid>
		<description><![CDATA[Det er meget vigtigt at udskille javascript fra HTML  når man koder webapplikationer. På den facon bliver koden nemmere at vedligeholde og overskue. Prøv at søge efter &#8220;unobtrusive javascript&#8221;. 
Morgan Roderick har givet en introduktion til &#8220;Lowpro&#8221; . Morgan har bemærket at selv om Dan Webb kommer fra den rigtige side af bæltet, så [...]]]></description>
			<content:encoded><![CDATA[<p>Det er meget vigtigt at udskille javascript fra HTML  når man koder webapplikationer. På den facon bliver koden nemmere at vedligeholde og overskue. Prøv at søge efter &#8220;unobtrusive javascript&#8221;. </p>
<p>Morgan Roderick har givet <a href="http://roderick.dk/blog/2009/05/07/introduction-to-low-pro-for-prototype/">en introduktion til &#8220;Lowpro&#8221;</a> . Morgan har bemærket at selv om <a href="http://www.danwebb.net/">Dan Webb</a> kommer fra den rigtige side af bæltet, så staver han &#8220;Behavior&#8221; forkert . Hvis du har de tilbøjeligheder så kan du hente en ny udgave af Ben Nolans &#8220;Behaviour&#8221; , der er tilrettet af Jakob Kruse her : <a href="http://www.kruse-net.dk/behaviour/">http://www.kruse-net.dk/behaviour/</a>.</p>
<p>Begge biblioteker gør nogenlunde det samme. Det ser dog ud til at man kan pille event callbacks væk fra &#8220;lowpro&#8221; efter at man har puttet dem på. Det kan man vist ikke i &#8220;Behaviour&#8221;.</p>
<p>Bemærk at begge biblioteker er gode at anvende sammen med prototypejs.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pedant.dk/2009/05/08/lowpro-og-behaviour/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introduktion til Ext.Direct</title>
		<link>http://www.pedant.dk/2009/04/22/introduktion-til-extdirect/</link>
		<comments>http://www.pedant.dk/2009/04/22/introduktion-til-extdirect/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 20:17:51 +0000</pubDate>
		<dc:creator>Jacob</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.pedant.dk/?p=396</guid>
		<description><![CDATA[Jeg har lavet en præsentation af hovedtrækkene i Extjs 3.0 :  Extjs 3.0  The good stuff
Der er mange flotte farver og kode i !  
]]></description>
			<content:encoded><![CDATA[<p>Jeg har lavet en præsentation af hovedtrækkene i Extjs 3.0 :  <a title="Extjs 3.0 The good stuff" href="http://pedant.dk/archive/Extjs_3_0_The_good_stuff.pdf">Extjs 3.0  The good stuff</a></p>
<p>Der er mange flotte farver og kode i ! <img src='http://www.pedant.dk/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.pedant.dk/2009/04/22/introduktion-til-extdirect/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ext 2009 konference</title>
		<link>http://www.pedant.dk/2009/04/15/ext-30-launch/</link>
		<comments>http://www.pedant.dk/2009/04/15/ext-30-launch/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 13:09:39 +0000</pubDate>
		<dc:creator>Jacob</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.pedant.dk/?p=383</guid>
		<description><![CDATA[Jeg er iøjeblikket i Orlando til den første extjs brugerkonference. extjs blev startet af Jack Slocum mens han var hos Yahoo   &#8211; biblioteket er nu kommet i 3. version . Hele vejen igennem har det været Jacks vision at skabe et sammenhængende rammeværktøj  til at lave komplekse webapplikationer.
extjs 3.0 RC1 er tilgængelig  fra http://extjs.com/products/extjs/download.php
Den største [...]]]></description>
			<content:encoded><![CDATA[<p>Jeg er iøjeblikket i Orlando til den første extjs brugerkonference. extjs blev startet af Jack Slocum mens han var hos Yahoo   &#8211; biblioteket er nu kommet i 3. version . Hele vejen igennem har det været Jacks vision at skabe et sammenhængende rammeværktøj  til at lave komplekse webapplikationer.</p>
<p>extjs 3.0 RC1 er tilgængelig  fra <a href="http://extjs.com/products/extjs/download.php">http://extjs.com/products/extjs/download.php</a></p>
<p>Den største nyhed for extjs 3.0 er introduktionen af Ext.direct , der introducerer en sammenhængende model for at opdatere data vha forskellige serverside teknologier . Ifbm launch af 3.0 vil der blive præsenteret Routers for Ruby/merb , java, C# og php.  Jeg snakker iøjeblikket med Data access om at de bør introducere en ext 3.0 router  for visual dataflex..</p>
<p>En af de mere visuelt imponerende ting er introduktionen af en RowEditor , der introducerer inplace redigering i et extjs grid vha extjs DataStore arkitektur .</p>
<p>Mit indtryk herfra er at extjs firmaet har gode forbindelser til Adobe , Sun  og Dell samt en større liste af amerikanske virksomheder (bestbuy som et eksempel) . Det virker som at  folk begyndte at bruge extjs for omkring et år siden ifbm extjs 2.0..</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pedant.dk/2009/04/15/ext-30-launch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Brug af java reflection til at generere JSON data</title>
		<link>http://www.pedant.dk/2009/02/08/brug-af-java-reflection-til-at-generere-json-data/</link>
		<comments>http://www.pedant.dk/2009/02/08/brug-af-java-reflection-til-at-generere-json-data/#comments</comments>
		<pubDate>Sun, 08 Feb 2009 10:02:11 +0000</pubDate>
		<dc:creator>Jacob</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.pedant.dk/?p=169</guid>
		<description><![CDATA[Jeg arbejder iøjeblikket på en opgave , hvor jeg har behov for at bringe datamodellen ud til behandling i javascript på en nem facon . Ifbm med denne opgave har jeg tænkt på hvordan man kunne gøre det vha reflection.
Hvis vi antager flg klasser :

class A{
  public int B;
  public int C;
  [...]]]></description>
			<content:encoded><![CDATA[<p>Jeg arbejder iøjeblikket på en opgave , hvor jeg har behov for at bringe datamodellen ud til behandling i javascript på en nem facon . Ifbm med denne opgave har jeg tænkt på hvordan man kunne gøre det vha reflection.</p>
<p>Hvis vi antager flg klasser :</p>
<p><code lang="java"><br />
class A{<br />
  public int B;<br />
  public int C;<br />
  public D F;<br />
  public D G;<br />
};</p>
<p>class D {<br />
  public String E;<br />
}<br />
</code></p>
<p>og at de var initialiseret således:<br />
<code lang="java"><br />
A a=new A();<br />
a.B=1;<br />
a.C=2;<br />
a.F=new D();<br />
a.F.E="test";<br />
a.G=new D();<br />
a.G.E="test2";<br />
</code></p>
<p>Så kunne man kigge på selve java objekterne vha reflection for at generere JSON output til bruge i javascript således:</p>
<p><code lang="java"><br />
public class JsonEmit{<br />
  public static String emit(Object target) throws Exception{<br />
     StringBuilder sb=new StringBuilder();<br />
     sb.append("{");<br />
     Class targetClass=target.getClass();<br />
     Field[] publicFields = targetClass.getFields();<br />
     for (int i=0;i
<publicFields.length;i++){<br />
       String sFieldName = publicFields[i].getName();<br />
       Class typeClass = publicFields[i].getType();<br />
       String sFieldType = typeClass.getName();<br />
       Object value = publicFields[i].get(target);<br />
       if(value!=null){<br />
         sb.append(sFieldName+":");<br />
         if(typeClass.isPrimitive()<br />
         ||sFieldType=="java.lang.String"){<br />
         sb.append("""+value.toString()+""");<br />
      }else{<br />
        sb.append(JsonEmit.emit(value));<br />
      }<br />
    }<br />
    if(i!=(publicFields.length-1))<br />
      sb.append(",");<br />
  }<br />
 sb.append("}");<br />
 return(sb.toString());<br />
}<br />
</code>
<p>På den facon vil man kunne genere JSON ved et simpelt kald til<br />
<code lang="java"><br />
JsonEmit.emit(a)<br />
</code></p>
<p>hvorefter man vil se<br />
<code lang="javascript"><br />
{B:"1",C:"2",F:{E:"test"},G:{E:"test2"}}<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pedant.dk/2009/02/08/brug-af-java-reflection-til-at-generere-json-data/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>hvordan man omgår &#8216;this&#8217; scope problemer for closures</title>
		<link>http://www.pedant.dk/2008/08/07/hvordan-man-omgar-scope-problemer-for-closures-med-this/</link>
		<comments>http://www.pedant.dk/2008/08/07/hvordan-man-omgar-scope-problemer-for-closures-med-this/#comments</comments>
		<pubDate>Thu, 07 Aug 2008 14:19:33 +0000</pubDate>
		<dc:creator>Jacob</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.pedant.dk/2008/08/07/hvordan-man-omgar-scope-problemer-for-closures-med-this/</guid>
		<description><![CDATA[Man kan ikke uden videre bruge &#8216;this&#8217;  i en indre anonym funktion der bruger information fra en ydre. (se en god beskrivelse ifbm closures i  kapitel 4 i &#8220;Javascript: the good parts&#8221; ).
Problemet kan omgåes ved at benytte &#8220;bind&#8221; fra prototypejs på flg. facon:

ComboBox.prototype.loader= function (){
  if(this.dataStore[this.paramName]===undefined){
    new Ajax.Request (
 [...]]]></description>
			<content:encoded><![CDATA[<p>Man kan ikke uden videre bruge &#8216;this&#8217;  i en indre anonym funktion der bruger information fra en ydre. (se en god beskrivelse ifbm closures i  kapitel 4 i <a href="http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742">&#8220;Javascript: the good parts&#8221;</a> ).</p>
<p>Problemet kan omgåes ved at benytte <a href="http://prototypejs.org/api/function/bind">&#8220;bind&#8221; fra prototypejs</a> på flg. facon:</p>
<p><code lang="javascript"><br />
ComboBox.prototype.loader= function (){<br />
  if(this.dataStore[this.paramName]===undefined){<br />
    new Ajax.Request (<br />
    this.url,{<br />
      method: 'post',<br />
      asynchronous: true,<br />
      parameters: this.parameters,<br />
      onSuccess: function (transport){<br />
                                  var response=transport.responseText;<br />
                                  this.dataStore.data[this.paramName]=response.evalJSON();<br />
                                  this.render();<br />
                                  }.bind(this),<br />
      onFailure: function (transport){<br />
                                  alert('failed to retrieve '+this.paramName+' data');<br />
                                  }.bind(this)<br />
     }<br />
}<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pedant.dk/2008/08/07/hvordan-man-omgar-scope-problemer-for-closures-med-this/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>nedarvning i javascript</title>
		<link>http://www.pedant.dk/2008/08/04/nedarvning-i-javascript/</link>
		<comments>http://www.pedant.dk/2008/08/04/nedarvning-i-javascript/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 09:11:14 +0000</pubDate>
		<dc:creator>Jacob</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.pedant.dk/2008/08/04/nedarvning-i-javascript/</guid>
		<description><![CDATA[Jeg har fornyligt genopfrisket hvordan man laver nedarvning i javascript .  Det centrale i forståelsen af nedarvning i javascript er forståelsen at javascript er et prototype -baseret sprog og ikke et klassebaseret sprog.  Her er et eksempel , der gerne skulle lave en alert-box med &#8220;I am a pig&#8221;:

function animal ()  {
 [...]]]></description>
			<content:encoded><![CDATA[<p>Jeg har fornyligt genopfrisket hvordan man laver nedarvning i javascript .  Det centrale i forståelsen af nedarvning i javascript er forståelsen at javascript er et <a href="http://www.javascriptkit.com/javatutors/proto.shtml">prototype</a> -baseret sprog og ikke et klassebaseret sprog.  Her er et eksempel , der gerne skulle lave en alert-box med &#8220;I am a pig&#8221;:</p>
<p><code lang="javascript"><br />
function animal ()  {<br />
  this.name = "nothing yet";<br />
  this.legs=4;<br />
};<br />
tiger = new animal;<br />
tiger.name="tiger";<br />
pig = new animal;<br />
pig.name="pig";</p>
<p>animal.prototype.classify = function (){<br />
  alert( ' I am a ' + this.name );<br />
};<br />
pig.classify();<br />
</code></p>
<p>Bemærk brugen af prototype her, der tilføjer en ny funktion classify, der benytter den allerede eksisterende værdi &#8220;name&#8221;.</p>
<p>Du kan også bruge klasser vha <a href="http://prototypejs.org" title="prototypejs">prototypejs</a> som  beskrevet <a href="http://www.hinnerup.net/2008/04/11/javascript_classes/" title="javascript klasser">her</a> (Så skal du dog benytte prototype js biblioteket)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pedant.dk/2008/08/04/nedarvning-i-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
