peterS.: Pythons "self" in JS

Beitrag lesen

gruss Jeena,

... Mein Ansatz ist ja falsch, weil "this" beim
definieren natürlich auf [Window Object] zeigt.

... mitnichten ...

Object.prototype.hasClass = function (className) {

if(!this.className) return false;
    return (this.className.search('(^|\s)' + className + '(\s|$)') != -1);
   }

  
   ... den [this]-kontext betreffend ist Dein ansatz goldrichtig. ich wette,  
   dass Dein code, so wie Du Ihn hier gepostet hast, auch auf jeder gecko-  
   engine laeuft - vielleicht sogar im opera.  
  
   hast Du denn den code nicht auf zumindest einen browser losgelassen?  
  
   ich wuerde die erweiterung aber nicht an den prototypen von [Object]  
   nageln, denn dadurch kaeme wirklich jedes JavaScript-objekt, gewollt  
   oder nicht, in den genuss Deiner methode [hasClass].  
  
   ausserdem ist vor diesem hintergrund der methodenname missverstaendlich.  
   Du willst jedem knoten oder besser jedem element im dokumentenbaum eine  
   methode "hasClassName" oder "containsClassNames" mitgeben.  
  
   letztgesagtes direkt in JavaScript-code uebersetzt saehe dann so aus:  
  
   ~~~javascript
Node.prototype.containsClassNames = function () {/* bzw.  
  
     HTMLElement.prototype.has...  
  
     [this] bezieht sich tatsaechlich auf alles,  
     was [Node]/[HTMLElement] ist oder auf alles,  
   was wie auch immer ueber den prototypen von  
   [Node]/[HTMLElement] geerbt hat.*/ /*  
  
      ... Dein code ...*/  
   };

leider aber scheitert der von Dir gewaehlte loseungsansatz trotz seiner
   eleganz brutal an der praxis. die ueberwiegende mehrzahl der aktuellen
   browser-arten implementiert seine DOM-objekte NICHT als native JavaScript-
   objekte. die hersteller sind dazu auch nicht verpflichtet. ECMAScript 261
   beschreibt nur den JavaScript-sprachkern. DOM ist eine andere baustelle,
   und BOM traegt ein schweres erbe.

wolltest Du nur spielen oder kann Deinem problem browseruebergreifend
   anderweitig abhilfe geschafft werden?

by(t)e by(t)e - peterS. - pseliger@gmx.net

--
»Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
ie:( fl:) br:> va:( ls:& fo:) rl:| n3;} n4:} ss:} de:µ js:} mo:? zu:]