প্রতিচ্ছবি বস্তু জাভাস্ক্রিপ্টে কি করে?


91

কিছুক্ষণ আগে Reflectজাভাস্ক্রিপ্টে থাকা অবজেক্টটির জন্য আমি এমডিএন-তে একটি ফাঁকা স্টাব দেখেছি তবে গুগলে আমার জীবনের কিছু খুঁজে পাচ্ছি না। আজ আমি এই পাওয়া http://people.mozilla.org/~jorendorff/es6-draft.html#sec-reflect-object এবং এটি পৃথক্ রাজত্ব এবং লোডার কার্যকারিতা থেকে প্রক্সি বস্তুর অনুরূপ শোনাচ্ছে।

মূলত, আমি জানি না যে এই পৃষ্ঠায় আমি খুঁজে পেয়েছি কেবল কীভাবে প্রতিবিম্বকে বাস্তবায়ন করতে হবে বা আমি যদি এর শব্দটি বুঝতে না পারি তবে তা ব্যাখ্যা করে। কেউ দয়া করে আমাকে সাধারণত কি পদ্ধতিগুলি ব্যাখ্যা করতে Reflectপারেন?

উদাহরণস্বরূপ, যে পৃষ্ঠায় আমি পেয়েছি তাতে বলা হয়েছে যে Reflect.apply ( target, thisArgument, argumentsList ) "কল [" [কল]] টার্গেটের অভ্যন্তরীণ পদ্ধতিটিকে এই আর্গুমেন্ট এবং আর্গুমেন্টগুলির সাথে কল করার ফলাফল ফিরিয়ে দেবে "" কিন্তু কীভাবে এটি কেবল কল করার চেয়ে আলাদা target.apply(thisArgument, argumentsList)?

হালনাগাদ:

ব্লুকে ধন্যবাদ, আমি এই পৃষ্ঠাটি উইকিতে পেয়েছি http://wiki.ecmascript.org/doku.php?id=harmony:reflect_api&s=reflect আমার জ্ঞানের সর্বোত্তম যা বলে যে প্রতিফলিত বস্তুটি সমস্তটির পদ্ধতি সংস্করণ সরবরাহ করে ফরোয়ার্ডিং আরও সহজ করার জন্য প্রক্সিগুলির দ্বারা আটকে থাকা ক্রিয়াগুলি। তবে এটি আমার কাছে কিছুটা অদ্ভুত বলে মনে হচ্ছে যেহেতু এটি কীভাবে সম্পূর্ণ প্রয়োজনীয় see তবে এটি তার থেকে কিছুটা বেশি করা বলে মনে হচ্ছে, বিশেষত যে অংশটি বলেছে double-liftingতবে এটি পুরানো প্রক্সি স্পেস /


4
বৈশিষ্ট বলে "প্রতিফলিত বস্তুর একটি একক সাধারণ অবজেক্ট।", আমার বোঝার Reflectশুধু জন্য একটি ধারক Realmএবং Loaderবস্তু, কিন্তু আমি কি পরেরটির পারেন না জানি না।
সাইমনজ্যাক

ধন্যবাদ :), আমি যে পৃষ্ঠায় লিঙ্ক করেছি তার থেকে আমি মনে করি (এটি কতটা বৈধ তা জানে না) প্রতিটি রাজত্বই তার নিজস্ব "জাভা স্ক্রিপ্টের প্রসঙ্গ" এবং প্রতিলিপিগুলির মধ্যে মিলগুলির উপর ভিত্তি করে একটি লোডার মডিউল বা কোনও কিছুর মতো রিয়েলস বোঝায় s এবং প্রক্সি এবং সত্য যে, "overloads" কার্যকারিতা সালে নির্মিত এর প্রক্সি সাজানোর পারে Reflect.Loaderএবং Reflect.Realmমডিউল কার্যকারিতা ওভারলোডিং সঙ্গে কিছু আছে?
জিম জোন্স

4
: এটা দেখে মনে হচ্ছে স্ট্যাটিক পদ্ধতি একটি 'স্ট্যাটিক বর্গ' (তাদেরকে JSON মত) এর isExtensible, ownKeysইত্যাদি ইএস 6 প্রকৃত শ্রেণীর সঙ্গে, এই একটি বর্গ সম্পর্কে আরো জানতে দরকারী ( targetমধ্যে 16.1.2 আমি মনে করি)।
রুডি 21

উত্তর:


131

আপডেট 2015: 7 ম এর উত্তর দ্বারা চিহ্নিত হিসাবে , এখন যে ES6 (ECMAScript 2015) চূড়ান্ত করা হয়েছে, আরও উপযুক্ত ডকুমেন্টেশন এখন উপলব্ধ:


মূল উত্তর ((historicতিহাসিক) বোঝার জন্য এবং অতিরিক্ত উদাহরণগুলির জন্য) :

Reflection proposalথেকে অগ্রগতির হয়েছে বলে মনে হয় খসড়া নাম ECMAScript 6 স্পেসিফিকেশন । এই দস্তাবেজটি বর্তমানে- Reflectঅবজেক্টের পদ্ধতিগুলির রূপরেখা দেয় এবং কেবল Reflect-অবজেক্ট সম্পর্কে নিজেই নিম্নলিখিতটি জানিয়ে দেয়:

প্রতিবিম্ব বস্তু একটি একক সাধারণ বস্তু।

প্রতিচ্ছবি বস্তুর অভ্যন্তরীণ স্লটের মান [[প্রোটোটাইপ]] মান অন্তর্নির্মিত অবজেক্ট প্রোটোটাইপ অবজেক্ট (19.1.3)।

প্রতিবিম্ব বস্তু কোনও ফাংশন অবজেক্ট নয়। এটির [[নির্মাণ]] অভ্যন্তরীণ পদ্ধতি নেই; নতুন অপারেটরের সাথে কনস্ট্রাক্টর হিসাবে রিফ্লেক অবজেক্টটি ব্যবহার করা সম্ভব নয় । প্রতিবিম্ব বস্তুর একটি [[কল]] অভ্যন্তরীণ পদ্ধতিও নেই; রিফ্লেক্ট অবজেক্টটিকে কোনও ফাংশন হিসাবে ডেকে আনা সম্ভব নয়।

তবে ইএস হারমোনিতে এর উদ্দেশ্য সম্পর্কে একটি সংক্ষিপ্ত ব্যাখ্যা রয়েছে :

"@ পুনরায় নির্বাচন" মডিউলটি একাধিক উদ্দেশ্যে কাজ করে:
  • এখন আমাদের মডিউলগুলি রয়েছে, একটি "@ পুনঃনির্বাচিত" মডিউল হ'ল পূর্বে অবজেক্টে সংজ্ঞায়িত প্রতিবিম্ব পদ্ধতির অনেক বেশি প্রাকৃতিক জায়গা। পিছনের দিকে সামঞ্জস্যের উদ্দেশ্যে, অবজেক্টের স্থির পদ্ধতি অদৃশ্য হওয়ার সম্ভাবনা নেই। তবে নতুন পদ্ধতি সম্ভবত অবজেক্ট কনস্ট্রাক্টরের পরিবর্তে "@ পুনরায় নির্বাচন" মডিউলে যুক্ত করা উচিত।
  • বিশ্বব্যাপী প্রক্সি বাইন্ডিংয়ের প্রয়োজনীয়তা এড়িয়ে প্রক্সিগুলির জন্য একটি প্রাকৃতিক হোম।
  • এই মডিউলটির বেশিরভাগ পদ্ধতি প্রক্সি ট্র্যাপগুলিতে একের পর এক মানচিত্র করে। প্রক্সি হ্যান্ডলারের সুবিধার্থে অপারেশনগুলি ফরোয়ার্ড করার জন্য এই পদ্ধতিগুলির প্রয়োজন রয়েছে, যেমন নীচে দেখানো হয়েছে।



সুতরাং, Reflectঅবজেক্টটি বেশ কয়েকটি ইউটিলিটি ফাংশন সরবরাহ করে, যার মধ্যে অনেকগুলি বিশ্বব্যাপী অবজেক্টে সংজ্ঞায়িত ES5 পদ্ধতিগুলির সাথে ওভারল্যাপ করে প্রদর্শিত হয়।

যাইহোক, এটি প্রকৃতপক্ষে কোন বিদ্যমান সমস্যাগুলি সমাধান করতে ইচ্ছুক বা কোন কার্যকারিতা যুক্ত রয়েছে তা ব্যাখ্যা করে না। আমার সন্দেহ হয়েছিল যে এটি শিমযুক্ত হতে পারে এবং সত্যই, উপরোক্ত সম্প্রীতি-নির্দিষ্ট লিঙ্কগুলি 'অ-আদর্শিক, এই পদ্ধতিগুলির আনুমানিক বাস্তবায়নের' সাথে যুক্ত রয়েছে

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


আরও কার্যকর ফেরতের মান values

এর মধ্যে অনেকগুলি অপারেশন Reflectইএস 5 অপারেশনের সাথে সংজ্ঞাযুক্ত Object, যেমন Reflect.getOwnPropertyDescriptorএবং Reflect.defineProperty। যাইহোক, যেহেতু Object.defineProperty(obj, name, desc)পারেন ফিরে আসবে objযখন সম্পত্তি সফলভাবে সংজ্ঞায়িত হয়েছে, অথবা নিক্ষেপ একটি TypeErrorঅন্যথায়, Reflect.defineProperty(obj, name, desc)কেবল একটি বুলিয়ান ইঙ্গিত করে যে থাকুক বা না থাকুক সম্পত্তি সফলভাবে সংজ্ঞায়িত করা হয় ফিরে যাও specced করা হয়। এটি আপনাকে এই কোডটি রিফ্যাক্টর করতে দেয়:

try {
  Object.defineProperty(obj, name, desc);
  // property defined successfully
} catch (e) {
  // possible failure (and might accidentally catch the wrong exception)
}

এটি:

if (Reflect.defineProperty(obj, name, desc)) {
  // success
} else {
  // failure
}

অন্যান্য পদ্ধতিগুলি যেমন বুলিয়ান সাফল্যের স্থিতি ফিরিয়ে দেয় সেগুলি হ'ল Reflect.set(কোনও সম্পত্তি আপডেট করা), Reflect.deleteProperty(কোনও সম্পত্তি মুছতে), Reflect.preventExtensions(কোনও বস্তুকে অ-এক্সটেনসিবল করতে) এবং Reflect.setPrototypeOf(কোনও সামগ্রীর প্রোটোটাইপ লিঙ্কটি আপডেট করার জন্য)।


প্রথম শ্রেণির ক্রিয়াকলাপ

ES5- তে কোনও বস্তুর objনির্দিষ্ট সম্পত্তি নাম সংজ্ঞায়িত করা বা উত্তরাধিকারসূত্রে পাওয়া যায় কিনা তা সনাক্ত করার উপায় (name in obj)। একইভাবে, কোনও সম্পত্তি মুছতে, একজন ব্যবহার করে delete obj[name]। ডেডিকেটেড সিনট্যাক্সটি দুর্দান্ত এবং সংক্ষিপ্ত হলেও এর অর্থ হ'ল আপনি যখন প্রথম শ্রেণীর মান হিসাবে অপারেশনটি পাস করতে চান তখন আপনাকে অবশ্যই এই ক্রিয়াকলাপগুলিকে স্পষ্টভাবে আবদ্ধ করতে হবে।

এর সাথে Reflect, এই অপারেশনগুলি সহজেই প্রথম-শ্রেণীর ফাংশন হিসাবে সংজ্ঞায়িত করা হয়:
Reflect.has(obj, name)এটি হ'ল কার্যকরী সমতুল্য (name in obj)এবং Reflect.deleteProperty(obj, name)এটি একটি ফাংশন যা একই কাজ করেdelete obj[name].


আরও নির্ভরযোগ্য ফাংশন অ্যাপ্লিকেশন

ES5-এ, যখন কেউ fঅ্যারে হিসাবে প্যাক করা argsএবং thisমানটিকে বাঁধাই করে একটি চলক সংখ্যক যুক্তিযুক্ত একটি ফাংশন কল করতে চায়, তখন কেউ objলিখতে পারেন:

f.apply(obj, args)

তবে, fএমন কোনও বস্তু হতে পারে যা ইচ্ছাকৃতভাবে বা অজান্তেই তার নিজস্ব applyপদ্ধতিটি সংজ্ঞায়িত করে । যখন আপনি সত্যিই নিশ্চিত করতে চান যে বিল্ট-ইন applyফাংশনটি ডেকে আনা হয়েছে, একজন সাধারণত লিখেছেন:

Function.prototype.apply.call(f, obj, args)

কেবল এই ক্রিয়াপদই নয়, এটি দ্রুত বোঝা শক্ত হয়ে যায়। এর মাধ্যমে Reflect, আপনি এখন একটি সংক্ষিপ্ত এবং সহজে বোঝার উপায়ে একটি নির্ভরযোগ্য ফাংশন কল করতে পারেন:

Reflect.apply(f, obj, args)


পরিবর্তনশীল-যুক্তি নির্মাণকারী

কল্পনা করুন আপনি একটি পরিবর্তনশীল সংখ্যক আর্গুমেন্ট সহ একটি কনস্ট্রাক্টর ফাংশন কল করতে চান। ES6 এ, নতুন স্প্রেড সিনট্যাক্সের জন্য ধন্যবাদ, এর মতো কোড লেখা সম্ভব হবে:

var obj = new F(...args)

ES5-এ, এটি লেখা শক্ত, কারণ কেবলমাত্র একটি পরিবর্তনশীল সংখ্যক আর্গুমেন্ট সহ একটি ফাংশনটি ব্যবহার করতে F.applyবা F.callকল F.constructকরতে পারে newতবে ভেরিয়েবল সংখ্যার সাথে ফাংশনে কোনও ফাংশন নেই । সহ Reflect, এখন ES5- তে লিখতে পারবেন:

var obj = Reflect.construct(F, args)


প্রক্সি ফাঁদগুলির জন্য ডিফল্ট ফরোয়ার্ডিং আচরণ

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

var loggedObj = new Proxy(obj, {
  get: function(target, name) {
    console.log("get", target, name);
    // now do the default thing
  }
});

Reflectএবং ProxyAPI গুলি টমটম ডিজাইন করা হয়েছে , প্রতিটি জন্য যেমন যে Proxyফাঁদ, একটি সংশ্লিষ্ট পদ্ধতি বিদ্যমান উপর Reflectযে "ডিফল্ট জিনিস আছে"। সুতরাং, যখনই আপনি কোনও প্রক্সি হ্যান্ডলারের অভ্যন্তরে নিজেকে "ডিফল্ট করুন" করতে চাইছেন, সঠিক জিনিসটি হ'ল Reflectঅবজেক্টের সাথে সম্পর্কিত পদ্ধতিটিকে সর্বদা কল করা :

var loggedObj = new Proxy(obj, {
  get: function(target, name) {
    console.log("get", target, name);
    return Reflect.get(target, name);
  }
});

এর রিটার্ন টাইপ Reflectপদ্ধতি রিটার্ন টাইপ সঙ্গে সামঞ্জস্যপূর্ণ হতে নিশ্চিত করা হয় Proxyযাত্রীর সঙ্গের নিজলটবহর।


অ্যাক্সেসরদের এই বাঁধাই নিয়ন্ত্রণ করুন

ইএস 5 এ জেনেরিক সম্পত্তি অ্যাক্সেস বা সম্পত্তি আপডেট করা মোটামুটি সহজ। এই ক্ষেত্রে:

var name = ... // get property name as a string
obj[name] // generic property lookup
obj[name] = value // generic property update

Reflect.getএবং Reflect.setপদ্ধতি আপনি একই জিনিস করতে, কিন্তু অতিরিক্ত একটি শেষ উপায় ঐচ্ছিক আর্গুমেন্ট হিসাবে গ্রহণ করার অনুমতি receiverপরামিতি যে আপনি স্পষ্টভাবে সেট করতে পারবেন this-binding যখন সম্পত্তি যে আপনি পেতে / সেট একটি অ্যাকসেসর হল:

var name = ... // get property name as a string
Reflect.get(obj, name, wrapper) // if obj[name] is an accessor, it gets run with `this === wrapper`
Reflect.set(obj, name, value, wrapper)

আপনি মোড়ানোর সময় এটি কখনও কখনও কার্যকর হয় objএবং আপনি নিজের মোড়কের কাছে আবার প্রবেশের জন্য অ্যাকসেসরের মধ্যে কোনও স্ব-প্রেরণ চান, যেমন obj:

var obj = {
  get foo() { return this.bar(); },
  bar: function() { ... }
}

কলিং Reflect.get(obj, "foo", wrapper)কারণ হবে this.bar()কলে rerouted করতে wrapper


উত্তরাধিকার এড়িয়ে চলুন __proto__

কিছু ব্রাউজারগুলিতে __proto__একটি বিশেষ সম্পত্তি হিসাবে সংজ্ঞায়িত করা হয় যা কোনও অবজেক্টের প্রোটোটাইপে অ্যাক্সেস দেয়। Object.getPrototypeOf(obj)প্রোটোটাইপ অনুসন্ধানের জন্য ES5 একটি নতুন পদ্ধতি মানক করেছে। Reflect.getPrototypeOf(obj)হুবহু একই কাজ করে, বস্তুটির প্রোটোটাইপ সেট করতে Reflectএকটি সংজ্ঞায়িত করে except Reflect.setPrototypeOf(obj, newProto)এটি কোনও বস্তুর প্রোটোটাইপ আপডেট করার নতুন ES6- অনুসারী way
লক্ষ্য করুন: setPrototypeOf এছাড়াও বিদ্যমানObject (যেমন সঠিকভাবে দ্বারা নির্দিষ্ট Knu এর মন্তব্য )!


সম্পাদনা:
সাইড-নোট (Q- তে মন্তব্যগুলিকে সম্বোধন করা): 'প্রশ্ন: ES6 মডিউল বনাম HTML টি আমদানি'-এর একটি সংক্ষিপ্ত এবং সহজ উত্তর রয়েছে যা ব্যাখ্যা করে Realmsএবং Loaderঅবজেক্ট করে।

এই লিঙ্কটি দিয়ে আরও একটি ব্যাখ্যা দেওয়া হয়েছে :

একটি রিয়েলম অবজেক্ট তার নিজস্ব গ্লোবাল অবজেক্ট, স্ট্যান্ডার্ড লাইব্রেরিটির অনুলিপি এবং "আন্তঃব্যবস্থা" (অবজেক্ট.প্রোটোটাইপের প্রাথমিক মানের মতো গ্লোবাল ভেরিয়েবলের সাথে আবদ্ধ নয় এমন স্ট্যান্ডার্ড অবজেক্ট) সহ একটি স্বতন্ত্র বৈশ্বিক পরিবেশের ধারণাকে বিমুগ্ধ করে।

এক্সটেনসিবল ওয়েব : <iframe>এটি ডিওএম ছাড়াই একই-উত্সের গতিশীল সমতুল্য ।

যদিও উল্লেখযোগ্য মূল্য: এগুলি এখনও খসড়াতে রয়েছে, এটি পাথর দ্বারা রচিত কোনও স্পেসিফিকেশন নয়! এটি ES6, তাই ব্রাউজার-সামঞ্জস্যতা মাথায় রাখুন!

আশাকরি এটা সাহায্য করবে!


@ স্পেন্সার কিলেন: আচ্ছা .. এই উত্তরটি কি আপনার চিন্তাগুলি সঠিক দিক নির্দেশ করেছে এবং ব্যাখ্যা করে যে এটি কীভাবে Reflect.applyএবং এর মধ্যে পার্থক্যের সাথে সম্পর্কিত target.apply? বা অনুগ্রহ শেষ হওয়ার আগে আমার কী যুক্ত করা উচিত?
গীতারলাব

4
সেটপ্রোটোটাইপও রয়েছে Object
নু

4
নোট করুন যে Reflect.getপ্রক্সি গেটের জন্য ডিফল্ট বাস্তবায়ন হিসাবে ব্যবহার করা ভাল কাজ করে না যদি আপনি প্রোটোটাইপ বৈশিষ্ট্যযুক্ত কোনও বস্তুর প্রক্সিং করেন। এটি কেবল অভিযোগ করে যে এটি কাজ করে না। তবে আপনি যদি পরিবর্তে Reflect.get(target, property)পাস না করে ব্যবহার receiverকরেন তবে এটি কাজ করে।
সিএমসিডিগ্রাগনকাই

আমার পরীক্ষাগুলি যেখানে আপনি সর্বদা প্রক্সিটির মাধ্যমে বৈশিষ্ট্যগুলিতে অ্যাক্সেস করেন সেখানে এমন ফলাফল ঘটে যেখানে targetপ্রক্সিটি মুড়ে দেয় এমন আসল লক্ষ্য যেখানে receiverপ্রক্সিটি নিজেই। তবে আপনি যদি বৈশিষ্ট্যগুলি আলাদাভাবে অ্যাক্সেস করতে পরিচালনা করেন তবে এটি আলাদা হতে পারে।
সিএমসিডিগ্রাগনকাই

এটি একটি দুর্দান্ত উত্তর! ধন্যবাদ
rpivovar

5

উইকিতে পাওয়া খসড়া নথিতে গিয়ে,

http://wiki.ecmascript.org/doku.php?id=harmony:specifications_drafts

আমরা "একক সাধারণ বস্তু" সম্পর্কে লাইন পাই যা এটি খসড়াটিতে স্পষ্ট করে। এটির কার্যকারিতাও রয়েছে।

উইকির নির্ভরযোগ্য হওয়া উচিত যেহেতু আপনি এমকাস্ক্রিপ্ট ওয়েবসাইট থেকে এটির একটি লিঙ্ক খুঁজে পেতে পারেন

http://www.ecmascript.org/dev.php

আমি গুগলের মাধ্যমে প্রথম লিঙ্কটি পেয়েছি এবং সরাসরি উইকি অনুসন্ধান করে এটি খুঁজে পাওয়ার কোনও ভাগ্য হয় নি।


ধন্যবাদ, প্রতিটি পদ্ধতিটিকে সরকারী অনুমানের তালিকাভুক্ত বলা হলে গৃহীত পদক্ষেপগুলি আমার লিঙ্কের মতো একই রকম মনে হয় তবে প্রতিফলনের অধীনে উদাহরণস্বরূপ, প্রতিটি পদ্ধতিটি যখন ডাকা হয় তখন কী করে তা আমি এখনও বুঝতে পারি না। পদক্ষেপগুলি তালিকাভুক্ত করা হয়েছে তা প্রয়োগ করুন the ৫. [[কল]] টার্গেটের অভ্যন্তরীণ পদ্ধতিটিকে এই আর্গুমেন্ট এবং আর্গুমেন্ট দিয়ে কল করার ফলাফলটি ফিরিয়ে দিন ------- এর অর্থ কী?
জিম জোনস

এটি দেখার পক্ষে আমার সর্বোত্তম অনুমানটি হ'ল এটি ধাপ 4 এবং 5 ধাপে লেজ পুনরাবৃত্তিগুলি প্রোটোটাইপ ফাংশনের একটি রেফারেন্স। দেখে মনে হচ্ছে সাধারণ প্রয়োগটি যাচাই করা যা প্রয়োগ পদ্ধতিটি (পদক্ষেপ 1-2) প্রয়োগ হয়েছে তার উপর চালানো যেতে পারে, ত্রুটি হ্যান্ডেল (পদক্ষেপ 3) এবং তারপরে ফাংশন প্রয়োগের আবেদন করা হচ্ছে (4-5 পদক্ষেপ) এর বিরুদ্ধে চলছে। ডকুমেন্টেশনের মাধ্যমে স্ক্যান করা সম্পর্কে আমার সেরা অনুমানটি হ'ল প্রতিবিম্বিত মডিউলটির বিন্দুটি যখন আপনার কাজকর্ম কার্যকারিতার জন্য হয় যা অবজেক্টটির অন্তর্মুখীকরণের কোনও ফর্ম প্রয়োজন। কলটির ব্যবহার সম্ভবত কেন এটি "[[কল]] অভ্যন্তরীণ পদ্ধতিতে নেই" have
নীল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.