ওরিয়েন্টেড জাভাস্ক্রিপ্ট সেরা অভ্যাস অবজেক্ট? [বন্ধ]


251

আমি নিজেকে জাভাস্ক্রিপ্টে একটি বড় প্রকল্প কোডিংয়ের সন্ধান করছি। আমার মনে আছে শেষটি বেশ অ্যাডভেঞ্চার ছিল কারণ হ্যাকি জেএস দ্রুত অপঠনযোগ্য হয়ে উঠতে পারে এবং আমি এই কোডটি পরিষ্কার হতে চাই।

ঠিক আছে, আমি একটি লিব তৈরির জন্য অবজেক্টগুলি ব্যবহার করছি, তবে জেএস-তে জিনিসগুলি সংজ্ঞায়িত করার বিভিন্ন উপায় রয়েছে, যা ক্ষেত্রের গুরুত্বপূর্ণ পরিণতি, মেমরি পরিচালনা, নাম স্থান ইত্যাদি বোঝায়:

  • ব্যবহার varবা না;
  • ফাইল বা একটি (function(){...})()jquery শৈলীতে জিনিস সংজ্ঞায়িত ;
  • ব্যবহার this, বা না;
  • ব্যবহার function myname()বা myname = function();
  • বস্তুর শরীরে পদ্ধতি নির্ধারণ বা "প্রোটোটাইপ" ব্যবহার করে;
  • প্রভৃতি

তাহলে জেএস-এ ওও-তে কোডিং করার সময় সর্বোত্তম অনুশীলনগুলি কী কী?

একাডেমিক ব্যাখ্যা এখানে সত্যই প্রত্যাশিত। বইগুলির লিঙ্কটি উষ্ণভাবে স্বাগত জানায়, যতক্ষণ না তারা মান এবং দৃust়তার সাথে ডিল করে।

সম্পাদনা:

কিছু রিডিং পেয়েছি তবে আমি এখনও উপরের প্রশ্নগুলির উত্তর এবং যে কোনও সেরা অনুশীলনে খুব আগ্রহী।


2
শিরোনামে "অবজেক্ট অরিয়েন্টেড" কে "আধুনিক" এ প্রতিস্থাপন করা উচিত।
viam0Zah

43
হুঁ, 79 টি উত্তর, 82 টি উত্তর, 91 টি উত্তর ... তবে এটি গঠনমূলক নয় বলে বন্ধ করা হয়েছিল ... কেন ??
ব্রেট রসিয়ার

1
আমি জাভাস্ক্রিপ্টে একটি সাধারণ এবং প্রাকৃতিক বাক্য গঠন সহ একটি সাধারণ ক্লাস পোর্টিং সি ++ ওওপি বৈশিষ্ট্য লিখেছি। : এখানে আমার উত্তর দেখুন stackoverflow.com/a/18239463/1115652

14
এই ধরণের প্রশ্ন সর্বদা বন্ধ হয়ে যায়। আমি এর কারণগুলি বুঝতে পেরেছি, তবে সেগুলি গুরুত্বপূর্ণ প্রশ্ন এবং সর্বদা জনপ্রিয় (এবং যেহেতু আমি যখন একইরকম প্রশ্ন করি তখন সর্বদা আমি তাদের খুঁজে পাই), তাই আমি ভাবছি যে কেউ যদি তাদের জিজ্ঞাসা করার জন্য আমাদের সঠিক স্থানে নিয়ে যেতে পারে?
কেপি ম্যাকগ্রিগোর

2
@ ব্রিটরোশিয়ার @ আপনি যদি তা ব্যবহার না করেন তবে শক্তিটি কী ভাল? গণতান্ত্রিক বেঁচে থাকার অর্ডার কীভাবে কাজ করে তার লাইভ প্রদর্শন হল এসও। অবশ্যই কিছু মনোবিজ্ঞানী এটি সন্ধান করছেন ...

উত্তর:


288

`Var` ব্যবহার করে বা না

আপনার varবক্তব্যটির সাথে কোনও পরিবর্তনশীল প্রবর্তন করা উচিত , অন্যথায় এটি বিশ্ব ব্যাপ্তিতে চলে আসে।

এটি উল্লেখযোগ্য যে কঠোর মোডে ( "use strict";) অঘোষিত ভেরিয়েবল অ্যাসাইনমেন্ট নিক্ষেপ করেReferenceError

বর্তমানে জাভাস্ক্রিপ্টের কোনও ব্লক স্কোপ নেই। ক্রকফোর্ড স্কুল আপনাকে ফাংশন বডির শুরুতে বিভিন্ন বক্তব্য রাখতে শেখায় , অন্যদিকে ডজোর স্টাইল গাইড পড়তে পারে যে সমস্ত ভেরিয়েবলগুলি সম্ভব ক্ষুদ্রতম ক্ষেত্রেই ঘোষণা করা উচিত । ( জাভাস্ক্রিপ্ট ১.7 এ প্রবর্তিত letবিবৃতি এবং সংজ্ঞা ECMAScript মানের অংশ নয়))

নিয়মিত ব্যবহৃত বস্তুর বৈশিষ্ট্যগুলি স্থানীয় ভেরিয়েবলগুলিতে আবদ্ধ করা ভাল অনুশীলন কারণ পুরো স্কোপ চেইনটি দেখার চেয়ে এটি দ্রুত। ( চরম কর্মক্ষমতা এবং কম মেমরির ব্যবহারের জন্য জাভাস্ক্রিপ্ট অনুকূলকরণ দেখুন See )

ফাইলে বা একটি function (ফাংশন () {...}) () `এ জিনিস সংজ্ঞায়িত করা হচ্ছে`

আপনার কোডের বাইরে যদি আপনার অবজেক্টগুলিতে পৌঁছানোর দরকার না হয় তবে আপনি নিজের পুরো কোডটি একটি ফাংশন এক্সপ্রেশন-এ মোড়াতে পারেন - একে মডিউল প্যাটার্ন বলা হয় called এর কার্যকারিতা সুবিধাগুলি রয়েছে এবং এটি আপনার কোডকে একটি উচ্চ স্তরে মিনিফড এবং স্পষ্ট করতে দেয়। আপনি এটিও নিশ্চিত করতে পারেন যে এটি বিশ্বব্যাপী নেমস্পেসকে দূষিত করবে না। জাভাস্ক্রিপ্টে মোড়ানো কার্যাদি আপনাকে দিক-ভিত্তিক আচরণ যুক্ত করতে দেয়। বেন চেরির মডিউল প্যাটার্ন সম্পর্কিত একটি গভীর নিবন্ধ রয়েছে

`এই` বা না ব্যবহার করে

আপনি যদি জাভাস্ক্রিপ্টে সিউডো-শাস্ত্রীয় উত্তরাধিকার ব্যবহার করেন তবে আপনি খুব কমই ব্যবহার এড়াতে পারবেন this। আপনি যে উত্তরাধিকারের ধরণটি ব্যবহার করেন এটি স্বাদের বিষয়। অন্যান্য ক্ষেত্রে, জাভা স্ক্রিপ্ট উইজেটগুলিতে "এটি" ছাড়াই পিটার ম্যাকাক্সের নিবন্ধটি পরীক্ষা করুন ।

`ফাংশন মাইনেম ()` বা `মাইনেম = ফাংশন (); Using ব্যবহার করে`

function myname()এটি একটি ফাংশন ডিক্লেয়ারেশন এবং myname = function();ভেরিয়েবলকে নির্ধারিত একটি ফাংশন এক্সপ্রেশন myname। পরবর্তী রূপটি ইঙ্গিত দেয় যে ফাংশনগুলি প্রথম শ্রেণীর অবজেক্টস এবং আপনি ভেরিয়েবলের মতো এগুলি দিয়ে কিছু করতে পারেন। তাদের মধ্যে পার্থক্যটি হ'ল সমস্ত ফাংশন ঘোষণাগুলি সুযোগের শীর্ষে উত্তোলন করা হয়, যা কিছু ক্ষেত্রে গুরুত্বপূর্ণ হতে পারে। অন্যথায় তারা সমান। function foo()একটি শর্টহ্যান্ড ফর্ম। উত্তোলন সম্পর্কিত আরও বিবরণ জাভাস্ক্রিপ্ট স্কোপিং এবং উত্তোলন নিবন্ধে পাওয়া যাবে।

অবজেক্টের শরীরে পদ্ধতিগুলি নির্ধারণ করা বা "প্রোটোটাইপ" ব্যবহার করে

এটা আপনার উপর নির্ভর করছে. জাভাস্ক্রিপ্টের চারটি অবজেক্ট-ক্রিয়েশন প্যাটার্ন রয়েছে: সিউডো-ক্লাসিকাল, প্রোটোটাইপিকাল, ফাংশনাল এবং পার্টস ( ক্রকফোর্ড, ২০০৮ )। প্রত্যেকেরই এর পক্ষে মতামত রয়েছে, ক্রকফোর্ড তার ভিডিও আলোচনায় দেখুন বা আনন ইতিমধ্যে প্রস্তাবিত হিসাবে তাঁর গুড পার্টস বইটি পাবেন ।

ফ্রেমওয়ার্ক

আমি আপনাকে কয়েকটি জাভাস্ক্রিপ্ট ফ্রেমওয়ার্কগুলি বেছে নেওয়ার পরামর্শ দিচ্ছি, তাদের সম্মেলনগুলি এবং স্টাইলটি অধ্যয়ন করুন এবং সেই পদ্ধতিগুলি এবং নিদর্শনগুলি সন্ধান করুন যা আপনার পক্ষে সবচেয়ে উপযুক্ত। উদাহরণস্বরূপ, ডোজো টুলকিট অবজেক্ট-ভিত্তিক জাভাস্ক্রিপ্ট কোড লিখতে একটি শক্তিশালী কাঠামো সরবরাহ করে যা একাধিক উত্তরাধিকারকে সমর্থন করে।

প্যাটার্নস

শেষ অবধি, এখানে একটি ব্লগ রয়েছে যা সাধারণ জাভাস্ক্রিপ্ট নিদর্শন এবং অ্যান্টি-নিদর্শনগুলি অন্বেষণ করতে উত্সর্গীকৃত । এছাড়াও জাভাস্ক্রিপ্টের জন্য কোনও কোডিং মান আছে কিনা তা পরীক্ষা করে দেখুন? স্ট্যাক ওভারফ্লোতে


1
"জাভাস্ক্রিপ্টের চারটি অবজেক্ট-ক্রিয়েশন প্যাটার্ন রয়েছে: সিউডো-ক্লাসিকাল, প্রোটোটাইপিকাল, ফাংশনাল এবং পার্টস" - আমি এখানে বিভিন্ন উপকারিতা ও সংক্ষিপ্তসারগুলির সংক্ষিপ্তসারটির প্রশংসা করব।
ব্যাডহর্সি

2
" letজাভাস্ক্রিপ্ট ১.7 এ প্রবর্তিত বিবৃতি এবং সংজ্ঞা ECMAScript মানের অংশ নয়।" এখন এটি ES6 এর অংশ।
মিশা পেরেকোস্কি

13

আমি এই প্রশ্নটি জিজ্ঞাসা করার পর থেকে আমি কিছু স্টাফ লিখতে যাচ্ছি যা আমি পড়েছি বা প্রয়োগ করেছি। সুতরাং এটি পড়ার লোকেরা হতাশ হবেন না, কারণ বেশিরভাগ উত্তরটি আরটিএমএফের ছদ্মবেশে রয়েছে (যদিও আমাকে অবশ্যই স্বীকার করতে হবে, প্রস্তাবিত বইগুলি ভাল)।

ভার ব্যবহার

যে কোনও ভেরিয়েবল জেএসের উচ্চতর স্কোপে ইতিমধ্যে ঘোষিত হওয়ার কথা। সুতরাং যখনই আপনি কোনও নতুন পরিবর্তনশীল চান, যখন এটি লক্ষ্য না করে গ্লোবাল ভেরিয়েবলের মতো খারাপ বিস্ময় এড়ানোর জন্য এটি ঘোষণা করুন। অতএব, সর্বদা var কীওয়ার্ড ব্যবহার করুন।

একটি অবজেক্ট মেকের ক্ষেত্রে, ভেরিয়েবল প্রাইভেটের জন্য পৃথক করুন। আপনি যদি কেবল সর্বজনীন পরিবর্তনশীল ঘোষণা করতে চান তবে তা করতে ব্যবহার করুন this.my_var = my_value

ঘোষণা পদ্ধতি

জেএসে, এগুলি ঘোষণা করার পদ্ধতিগুলির অসংখ্য উপায়। ওও প্রোগ্রামারটির জন্য, সর্বাধিক প্রাকৃতিক এবং এখনও দক্ষ উপায় হল নিম্নলিখিত বাক্য গঠনটি ব্যবহার করা:

বস্তুর শরীরের অভ্যন্তরে

this.methodName = function(param) {

/* bla */

};

একটি অপূর্ণতা রয়েছে: মজার জেএস সুযোগের কারণে অভ্যন্তরীণ ফাংশনগুলি "এটি" অ্যাক্সেস করতে পারবে না। ডগলাস ক্রকফোর্ড একটি "প্রচলিত" নামক প্রচলিত স্থানীয় ভেরিয়েবল ব্যবহার করে এই সীমাবদ্ধতাটিকে বাইপাস করার পরামর্শ দিয়েছেন। সুতরাং এটি হয়ে যায়

function MyObject() {

    var that = this;

    this.myMethod = function() {

        jQuery.doSomethingCrazy(that.callbackMethod);

    };

};

লাইনের স্বয়ংক্রিয় শেষের উপর নির্ভর করবেন না

জেএস ;ভুলে গেলে লাইনের শেষে স্বয়ংক্রিয়ভাবে যুক্ত করার চেষ্টা করে। এই আচরণের উপর নির্ভর করবেন না, কারণ আপনি ত্রুটিগুলি পাচ্ছেন যা ডিবাগের জন্য গোলযোগ।


8

প্রথম সম্পর্কে পড়তে কর্তব্য প্রোটোটাইপ-ভিত্তিক প্রোগ্রামিং তাই আপনি জানেন কি জন্তু ধরনের আপনার সাথে ডিল করছি এবং তারপর কটাক্ষপাত করা এমডিসি এ জাভাস্ক্রিপ্ট শৈলী গাইড এবং এমডিসি এ জাভাস্ক্রিপ্ট পৃষ্ঠা । আমি কোনও সরঞ্জামের সাহায্যে কোড মানের জোর করাতেও সেরা খুঁজে পাই। জাভাস্ক্রিপ্ট লিন্ট বা অন্যান্য রূপগুলি।

ওওর সাথে সর্বোত্তম অনুশীলনগুলি কোডের মানের দিকে মনোনিবেশ করার চেয়ে আপনি নিদর্শনগুলি খুঁজে পেতে চাইলে আরও বেশি শোনায়, তাই গুগল অনুসন্ধানে দেখুন: জাভাস্ক্রিপ্ট নিদর্শন এবং jQuery নিদর্শন


5

আপনি জাভাস্ক্রিপ্ট নিনজার গোপনীয়তাগুলি জন রেসিগ (jQuery) দ্বারা পরীক্ষা করতে চাইতে পারেন । "এই বইটির উদ্দেশ্য একটি মধ্যবর্তী জাভাস্ক্রিপ্ট বিকাশকারীকে নেওয়া এবং তাকে জমি থেকে উপরে, একটি ক্রস-ব্রাউজার জাভাস্ক্রিপ্ট লাইব্রেরি তৈরি করার প্রয়োজনীয় জ্ঞান দেওয়ার জন্য is"

খসড়াটি প্রকাশকের মাধ্যমে উপলভ্য: http://www.manning.com/resig/

ডগলাস ক্রকফোর্ডের নিজের হোমপেজে কিছু দুর্দান্ত জাভাস্ক্রিপ্ট নিবন্ধ রয়েছে: http://www.crockford.com/


5

আমি প্রায়শই এখানে একমাত্র লোকের মতো বোধ করি যারা আমার জাভাস্ক্রিপ্টের জন্য MooTools ব্যবহার করে।

এটা তোলে ঘোরা এম Y হে bject হে riented সরঞ্জাম, mootools।

আমি জাভাস্ক্রিপ্টে ওওপিকে গ্রহণ করতে পছন্দ করি। আপনি তাদের ক্লাস বাস্তবায়ন jquery এর পাশাপাশি ব্যবহার করতে পারেন, যাতে আপনাকে jquery খনন করতে হবে না (যদিও মটুলগুলি এটি সমস্ত কিছু করে)।

যাইহোক, প্রথম লিঙ্কটি একটি ভাল পঠন দিন এবং দেখুন আপনি কী মনে করেন, দ্বিতীয় লিঙ্কটি মটুলস ডক্সে রয়েছে।

MooTools এবং উত্তরাধিকার

MooTools ক্লাস


কোনও ভাষা বাঁকানোর চেষ্টা করা আপনার পুরানো অভ্যাসটিকে ফিট করার মতো জিনিস আমি চাই না good এটি সি এর এই লোকদের মতো, প্রতিস্থাপনের জন্য # ব্যবহার করে এটি ফোর্টরানের মতো দেখায়, অন্যথায়। আমি মনে করি আপনার ভাষাটি কীভাবে কাজ করে (এবং এর সেরা অনুশীলনগুলি) শিখার চেষ্টা করা উচিত, এবং এটি এমনভাবে ব্যবহার করুন যাতে আপনাকে খুব বেশি ঝামেলা না করে। তবে সত্যিই এটি পরিবর্তন করবেন না
ই-সন্তুষ্ট

2
আমি মনে করি MooTools অবজেক্ট সিস্টেমটি বেশ মার্জিত এবং সত্যই আমাকে আমার কোডটি সংগঠিত / এনক্যাপসুলেটেড রাখতে সহায়তা করে।
অডিসোম

0

ধন্যবাদ, তবে আমি ভিত্তিটি খুঁজছি না। আমি রান করতে সক্ষম জেএস কোড করতে পারি (নোংরা)। অথবা কমপক্ষে বেশিরভাগ সময় :-) একই কোডটি লেখার জন্য আমার গাইডেন্স প্রয়োজন, তবে সঠিকভাবে।
ই-সন্তুষ্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.