मैं शास्त्रीय OOP के रूप में जावा में उपयोग किया जाता हूं।
NodeJS का उपयोग करके जावास्क्रिप्ट में OOP करने के लिए सर्वोत्तम अभ्यास क्या हैं?
प्रत्येक कक्षा एक फ़ाइल है module.export
?
कैसे बनाएं क्लासेस?
this.Class = function() {
//constructor?
var privateField = ""
this.publicField = ""
var privateMethod = function() {}
this.publicMethod = function() {}
}
बनाम (मुझे भी यकीन नहीं है कि यह सही है)
this.Class = {
privateField: ""
, privateMethod: function() {}
, return {
publicField: ""
publicMethod: function() {}
}
}
बनाम
this.Class = function() {}
this.Class.prototype.method = function(){}
...
वंशानुक्रम कैसे काम करेगा?
क्या NodeJS में OOP लागू करने के लिए विशिष्ट मॉड्यूल हैं?
मैं OOP जैसी चीजों को बनाने के लिए एक हजार अलग-अलग तरीके ढूंढ रहा हूं .. लेकिन मुझे कोई सुराग नहीं है कि सबसे ज्यादा इस्तेमाल किया जाने वाला / व्यावहारिक / साफ तरीका क्या है।
बोनस प्रश्न : MongooseJS के साथ उपयोग करने के लिए सुझाए गए "OOP शैली" क्या है? (क्या एक MongoJJS दस्तावेज़ को एक वर्ग और एक उदाहरण के रूप में उपयोग किए जाने वाले मॉडल के रूप में देखा जा सकता है?)
संपादित करें
यहाँ JsFiddle में एक उदाहरण है कृपया प्रतिक्रिया प्रदान करें।
//http://javascriptissexy.com/oop-in-javascript-what-you-need-to-know/
function inheritPrototype(childObject, parentObject) {
var copyOfParent = Object.create(parentObject.prototype)
copyOfParent.constructor = childObject
childObject.prototype = copyOfParent
}
//example
function Canvas (id) {
this.id = id
this.shapes = {} //instead of array?
console.log("Canvas constructor called "+id)
}
Canvas.prototype = {
constructor: Canvas
, getId: function() {
return this.id
}
, getShape: function(shapeId) {
return this.shapes[shapeId]
}
, getShapes: function() {
return this.shapes
}
, addShape: function (shape) {
this.shapes[shape.getId()] = shape
}
, removeShape: function (shapeId) {
var shape = this.shapes[shapeId]
if (shape)
delete this.shapes[shapeId]
return shape
}
}
function Shape(id) {
this.id = id
this.size = { width: 0, height: 0 }
console.log("Shape constructor called "+id)
}
Shape.prototype = {
constructor: Shape
, getId: function() {
return this.id
}
, getSize: function() {
return this.size
}
, setSize: function (size) {
this.size = size
}
}
//inheritance
function Square(id, otherSuff) {
Shape.call(this, id) //same as Shape.prototype.constructor.apply( this, arguments ); ?
this.stuff = otherSuff
console.log("Square constructor called "+id)
}
inheritPrototype(Square, Shape)
Square.prototype.getSize = function() { //override
return this.size.width
}
function ComplexShape(id) {
Shape.call(this, id)
this.frame = null
console.log("ComplexShape constructor called "+id)
}
inheritPrototype(ComplexShape, Shape)
ComplexShape.prototype.getFrame = function() {
return this.frame
}
ComplexShape.prototype.setFrame = function(frame) {
this.frame = frame
}
function Frame(id) {
this.id = id
this.length = 0
}
Frame.prototype = {
constructor: Frame
, getId: function() {
return this.id
}
, getLength: function() {
return this.length
}
, setLength: function (length) {
this.length = length
}
}
/////run
var aCanvas = new Canvas("c1")
var anotherCanvas = new Canvas("c2")
console.log("aCanvas: "+ aCanvas.getId())
var aSquare = new Square("s1", {})
aSquare.setSize({ width: 100, height: 100})
console.log("square overridden size: "+aSquare.getSize())
var aComplexShape = new ComplexShape("supercomplex")
var aFrame = new Frame("f1")
aComplexShape.setFrame(aFrame)
console.log(aComplexShape.getFrame())
aCanvas.addShape(aSquare)
aCanvas.addShape(aComplexShape)
console.log("Shapes in aCanvas: "+Object.keys(aCanvas.getShapes()).length)
anotherCanvas.addShape(aCanvas.removeShape("supercomplex"))
console.log("Shapes in aCanvas: "+Object.keys(aCanvas.getShapes()).length)
console.log("Shapes in anotherCanvas: "+Object.keys(anotherCanvas.getShapes()).length)
console.log(aSquare instanceof Shape)
console.log(aComplexShape instanceof Shape)
prototype
श्रृंखला के माध्यम से किया जाता है । और, नहीं, वस्तु " निजी " सदस्यों का समर्थन नहीं करती है । केवल क्लोजर ही पेशकश कर सकते हैं, हालांकि Node.js में मॉड्यूल / स्क्रिप्ट को क्लोजर के रूप में लागू किया गया है।