আমি জাভা হিসাবে ক্লাসিকাল 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(){}
...
উত্তরাধিকার কীভাবে কাজ করবে?
নোডজেএসে ওওপি বাস্তবায়নের জন্য নির্দিষ্ট মডিউল রয়েছে?
ওওপির সাথে সাদৃশ্যপূর্ণ জিনিসগুলি তৈরি করতে আমি হাজার হাজার বিভিন্ন উপায় খুঁজে পাচ্ছি .. তবে সর্বাধিক ব্যবহৃত / ব্যবহারিক / পরিষ্কার উপায় কী তা আমার কোনও ধারণা নেই।
বোনাস প্রশ্ন : মঙ্গুজজেএস-এর সাথে ব্যবহারের জন্য প্রস্তাবিত "ওওপি স্টাইল" কী? (কোনও মঙ্গুজজেএস ডকুমেন্টকে কি ক্লাস হিসাবে দেখা যাবে এবং উদাহরণ হিসাবে ব্যবহৃত মডেল?)
সম্পাদনা
এখানে জেএসফিডেলের একটি উদাহরণ রয়েছে দয়া করে প্রতিক্রিয়া জানান।
//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
শৃঙ্খল । এবং, না, অবজেক্ট " প্রাইভেট " সদস্যদের সমর্থন করে না । নোড.জেএস-তে মডিউল / স্ক্রিপ্টগুলি ক্লোজার হিসাবে প্রয়োগ করা হলেও কেবল ক্লোজারগুলি এটি সরবরাহ করতে পারে।