2013-07-21 1 views
1

Étant donné que vous ne pouvez pas accéder aux propriétés des méthodes soeurs dans un objet javascript, j'ai utilisé la méthode prototype pour étendre ces propriétés.Corriger l'architecture pour les objets prototypes

var ColorGen = function ColorGen() {} 

ColorGen.prototype = {}; 

ColorGen.prototype.settings = { 
    gridContainer : 'gridContainer', 
    xSquareCount : 50, 
    ySquareCount : 50, 
    xLength   : 500, 
    yLength   : 500, 
    gridArr   : [] 
}; 

ColorGen.prototype.totalSquares = function() { 
    return (this.settings.xSquareCount * this.settings.ySquareCount); 
}; 

ColorGen.prototype.squareDim = function(length, count) { 
    return Math.round(length/count); 
}; 

ColorGen.prototype.hueStep = function() { 
    return (360/this.totalSquares()); 
}; 

ColorGen.prototype.populateGrid = function() { 
    var width = this.squareDim(this.settings.xLength, this.settings.xSquareCount), 
     height = this.squareDim(this.settings.yLength, this.settings.ySquareCount); 

    for(var i=0, k = this.settings.xSquareCount * this.settings.ySquareCount; i < k; i++) { 
     var square = document.createElement('DIV'); 

     square.setAttribute("style", "background: hsla("+(Math.round(this.hueStep() * i))+", 100%, 50%, 1.0); width: "+width+"px; height: "+height+"px; display: inline-block; position: relative;"); 

     this.settings.gridArr.push(square); 
    } 

}; 
    ColorGen.prototype.setGridContainer = function() { 
    document.getElementById(this.settings.gridContainer).setAttribute('style', 'width: '+this.settings.xLength+'px; height: '+this.settings.yLength+'px; position: relative; overflow: hidden;'); 
} 

ColorGen.prototype.appendGrid = function() { 
var gridSquares = this.settings.gridArr; 

for(square in gridSquares) { 
    if (document.getElementById(this.settings.gridContainer) !== null) { 
     document.getElementById(this.settings.gridContainer).appendChild(gridSquares[square]); 
    } 
} 
} 

var colorgen = new ColorGen(); 

colorgen.setGridContainer(); 
colorgen.populateGrid(); 
colorgen.appendGrid(); 

Voici le violon: http://jsfiddle.net/Ua6Mp/embedded/result/

Question: Est-ce une utilisation appropriée de la méthode prototype? Si ce n'est pas le cas, quelle est la convention pour étendre l'accès aux propriétés d'une méthode soeur?

Je ne suis peut-être pas en train de le formuler correctement. S'il vous plaît ne hésitez pas à modifier cette question si vous pensez qu'il pourrait être décrit plus clairement

+0

Méthodes d'une propriété qui est un frère ou une sœur d'une autre méthode du même objet parent. Désolé si je ne décris pas très bien ... – monners

+0

un exemple de ce serait mieux ... probablement des commentaires en ligne dans votre code. –

+0

une note: vous écrasez 'ColorGen.prototype = {}'. il va perdre la propriété 'constructor'. – rab

Répondre

0

Lorsque vous utilisez name.prototype.method = function() {} où le nom est un objet que vous traitez avec des classes JavaScript. Autant que je sache, de nombreux frameworks JavaScript utilisent ceci (peut-être aussi jQuery). Je n'ai pas encore entendu parler des propriétés dans les classes JavaScript.

Questions connexes