Jump to content
php.lv forumi

OOP Javascripts


mandarīnpīle

Recommended Posts

Lai gan server side valodās bez OOP normāli neiztikt, pačolējot populāru interneta lapu JavaScript source failus tajos nemaz tā neredz OOP centienus.. Tāpat funkcijas, funkcijas.. Ar ko tas skaidrojams? JavaScript pievienotās OOP iespējas nav nemaz tik ļoti OOP lai tās izmantotu? Vai arī ikdienā nepieciešamā Javascripta funkcionalitāte parasti ir pārāk vienkārša, lai veidotu objektus? 

Link to comment
Share on other sites

Man liekas javascript funkcionalitāte vēl īsti nav paredzēta OOP, tas ka teorētiski ir iespējams definēt klases nenozīmē ka tas ir ļoti labi. Katrs šāds klases objekts prasa atmiņas resursus no datora, un šeit jau ir jābūt drošam, ka mēs to atmiņu izmantojam pareizi, nevis vienkārši aizpildam klienta RAMu ar nevajadzīgu infu.

Tā pati atmiņas problēma attiecas arī uz NodeJS.

 

Manuprāt JS vislabāk ir veiksmīgi mixēt starp OOP un procedurālo, lai panēktu zelta vidusceļu.

Link to comment
Share on other sites

OOP būtībā ir abstrakcijas slānis, kurš ļauj vieglāk organizēt sarežģītu kodu.

Jebkura kaut cik nopietna js bibliotēka vai api bus spēcīgi būvēta uz js, piemēram:

google map api: https://developers.google.com/maps/documentation/javascript/examples/icon-complex

vai three.js https://github.com/mrdoob/three.js/blob/master/examples/webgl_geometry_terrain.html

Kā redzams, katrs bibliotēkas elements, ir būtībā klase (js izpratnē).

Tāpat OO koda organizēšana ļauj vieglāk atkārtoti izmantot kodu.

 

Es, piemēram, pat salidzinoši mazus js kodus, organizēju obejktos:

 

Game = {};
Game.title = "My game";
Game.init = function(){  
} 

 

UI elementus es parasti veidoju kā jquery ui widgetus, kas būtībā ir arī OOP:

 

(function($){
  $.widget('ui.dialogSignin', $.ui.dialog, {
    options:{
      title:'Sign In',
      //...
    },
   _init:function(){
     //...
   }
})(jQuery); 
Link to comment
Share on other sites

js jau var diezgan viegli panākt klašu OOP, ieskaitot inheritance, multiple inheritance, privātos, publisko mainīgos.

http://jsfiddle.net/aAXq7/

 

function log(s) {$("#info").append($("<div>").html(s));}

function Car(){
    var engineType = 2; //privātais
    this.color="#800"  //publiskais
    this.getEngineType=function(){
        return engineType;
    }
}

function Radio(){
    this.station="FM101"
}

function Opel(){
    Car.apply(this, arguments);  //inheritance
    Radio.apply(this, arguments);  //muiltiple inheritance
    this.name="Opel";
}

var c=new Car();
log(c.color)
log(c.getEngineType())
                                   
var o=new Opel();
log(o.color);
log(o.name);
log(o.station);
                                   

 

Bet nu jebkurā gadījumā arī prototipu bāzēts OOP ir OOP.

Link to comment
Share on other sites

js jau var diezgan viegli panākt klašu OOP, ieskaitot inheritance, multiple inheritance, privātos, publisko mainīgos.

http://jsfiddle.net/aAXq7/

 

function log(s) {$("#info").append($("<div>").html(s));}

function Car(){
    var engineType = 2; //privātais
    this.color="#800"  //publiskais
    this.getEngineType=function(){
        return engineType;
    }
}

function Radio(){
    this.station="FM101"
}

function Opel(){
    Car.apply(this, arguments);  //inheritance
    Radio.apply(this, arguments);  //muiltiple inheritance
    this.name="Opel";
}

var c=new Car();
log(c.color)
log(c.getEngineType())
                                   
var o=new Opel();
log(o.color);
log(o.name);
log(o.station);
                                   

 

Bet nu jebkurā gadījumā arī prototipu bāzēts OOP ir OOP.

 

parent metodes izsaukšana nezinot parent objektu?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...