JQuery.fn এর অর্থ কী?


উত্তর:


848

JQuery- এ fnসম্পত্তিটি কেবলমাত্র সম্পত্তিটির একটি উপনাম prototype

jQueryশনাক্তকারী (অথবা $) শুধু একটি হল কন্সট্রাকটর ফাংশন , এবং এটি সঙ্গে তৈরি করা সব দৃষ্টান্ত, কন্সট্রাকটর এর প্রোটোটাইপ থেকে উত্তরাধিকারী।

একটি সাধারণ নির্মাণকারীর কাজ:

function Test() {
  this.a = 'a';
}
Test.prototype.b = 'b';

var test = new Test(); 
test.a; // "a", own property
test.b; // "b", inherited property

একটি সাধারণ কাঠামো যা jQuery এর স্থাপত্যের অনুরূপ:

(function() {
  var foo = function(arg) { // core constructor
    // ensure to use the `new` operator
    if (!(this instanceof foo))
      return new foo(arg);
    // store an argument for this example
    this.myArg = arg;
    //..
  };

  // create `fn` alias to `prototype` property
  foo.fn = foo.prototype = {
    init: function () {/*...*/}
    //...
  };

  // expose the library
  window.foo = foo;
})();

// Extension:

foo.fn.myPlugin = function () {
  alert(this.myArg);
  return this; // return `this` for chainability
};

foo("bar").myPlugin(); // alerts "bar"

4
এটি কি গ্যারান্টিযুক্ত? আমি কি jQuery.prototype এ কলটি jQuery.fn এর মতোই অনুমান করতে পারি? আমার উদ্বেগ হ'ল আপনি যখন .fn কল করেন তখন jQuery কিছু জাদু করে তবে সেগুলি বিনিময়যোগ্য নয়
ব্র্যান্ডন

4
ওহ, আমি কিছু মিস করছি .. 'উইন্ডোজ.ফু = ফু' 'ফু' কে একটি বিশ্বব্যাপী সুযোগ দেয়? কখনই নতুন নয়, আমি তা আমার শেখার কৌশলগুলির তালিকায় যুক্ত করব।
EE33

2
@ EE33 যদি আমি ভুল না হয়ে যাই তবে জাভাস্ক্রিপ্টে বিশ্বব্যাপী স্কোপটি সহজভাবে বোঝায় যে আপনার পরিবর্তনশীল উইন্ডো অবজেক্টের একটি প্যারামিটার।
শপন

1
@Imray - return thisঅনুমতি chaining যাতে আপনি কাজ করতে পারে,foo("bar").myPlugin().otherPlugin()
রেসিং বেঙাচি

3
@ শ্যাভান আমার মনে হয় এটিকে কোনও সম্পত্তি হিসাবে বলা হবে, প্যারামিটার নয়, তাই না? একটি প্যারামিটার এখানে 'a' ভেরিয়েবল function func1 (a) { ... }হবে এবং এখানে একটি সম্পত্তি 'a' ভেরিয়েবল হবে var foo = {}; foo.a = 'a'
জ্যাক

145

jQuery.fnসংক্ষিপ্ত জন্য সংজ্ঞায়িত করা হয় jQuery.prototype। থেকে সোর্স কোড :

jQuery.fn = jQuery.prototype = {
    // ...
}

এর অর্থ jQuery.fn.jqueryহ'ল একটি উপাধি jQuery.prototype.jqueryযা বর্তমান jQuery সংস্করণটি দেয়। আবার উত্স কোড থেকে :

// The current version of jQuery being used
jquery: "@VERSION",

15
আমি এই উত্তর পছন্দ। উত্স কোডের অভ্যন্তরে সংজ্ঞাটি কীভাবে খুঁজে পাওয়া যায় এবং তারপরে কীভাবে কার্যকর উপায়ে সংজ্ঞাটি ব্যাখ্যা করা যায় তা আমি সঠিকভাবে দেখায়। উত্তম ওল 'উত্তর দেওয়ার পদ্ধতি "একজনকে মাছ শেখায়"। +1 টি।
EE33

কিন্তু এটা করার উদ্দেশ্য কী? কীস্ট্রোকের কয়েকটা সঞ্চয় করছেন?
স্লেয়ার

@ স্লেয়ার: হ্যাঁ, অনেক বেশি।
অ্যান্ডি ই

আমি বাজি ধরছি $ .fn অন্যান্য purpose..attaching ফাংশন আছে, স্ট্যাটিক ফাংশন করতে হবে
slier

144

fnআক্ষরিক অর্থে jquery বোঝায় prototype

কোডের এই লাইনটি সোর্স কোডে রয়েছে:

jQuery.fn = jQuery.prototype = {
 //list of functions available to the jQuery api
}

তবে এর পিছনে আসল সরঞ্জামটি fnআপনার নিজস্ব কার্যকারিতা jQuery এ হুক করা এর উপলব্ধতা। মনে রাখবেন যে jquery আপনার ফাংশনের প্যারেন্ট স্কোপ thisহবে , সুতরাং jquery অবজেক্টটি উল্লেখ করবে।

$.fn.myExtension = function(){
 var currentjQueryObject = this;
 //work with currentObject
 return this;//you can include this if you would like to support chaining
};

সুতরাং এখানে এটি একটি সহজ উদাহরণ। বলি আমি দুটি এক্সটেনশান তৈরি করতে চাই, একটি যা নীল সীমানা রাখে এবং কোনটি নীল রঙটি টেক্সট রঙ করে এবং আমি সেগুলি শৃঙ্খলিত করে রাখতে চাই।

jsFiddle Demo

$.fn.blueBorder = function(){
 this.each(function(){
  $(this).css("border","solid blue 2px");
 });
 return this;
};
$.fn.blueText = function(){
 this.each(function(){
  $(this).css("color","blue");
 });
 return this;
};

এখন আপনি এইগুলিকে এই শ্রেণীর বিপরীতে ব্যবহার করতে পারেন:

$('.blue').blueBorder().blueText();

(আমি জানি যে এটি বিভিন্ন শ্রেণীর নাম প্রয়োগ করার মতো CSS সহ সর্বোত্তমভাবে সম্পন্ন হয়েছে তবে দয়া করে মনে রাখবেন এটি ধারণাটি দেখানোর জন্য একটি ডেমো মাত্র)

এই উত্তরে পূর্ণ বর্ধনের একটি ভাল উদাহরণ রয়েছে।


11
আপনি কি eachআপনার উদাহরণ কোডটি এড়িয়ে যেতে পারবেন না ? উপাদানগুলির উপর অ্যালারডিটি পুনরাবৃত্তি হওয়ার সাথে সাথে $.fn.blueBorder = function(){ this.css("border","solid blue 2px"); return this; };সূক্ষ্মভাবে কাজ করবে .css()
শীঘ্রই

6
@ সোনডিড - আপনি অবশ্যই পারতেন কারণ যদি jQuery অবজেক্টটি কোনও সংরক্ষণ করে থাকে তবে cssফাংশনটি স্বয়ংক্রিয়ভাবে প্রতিটিটির সাথে অভ্যন্তরীণভাবে তাদের উপর পুনরাবৃত্তি হবে। এটি কেবল thisযেখানে বাইরেরটি হল জেকারি অবজেক্ট এবং অভ্যন্তরীণটি উপাদানটিকেই রেফারেন্স করে তার মধ্যে পার্থক্যগুলি দেখানোর উদাহরণ মাত্র ।
ট্র্যাভিস জে

1
@ সোনডিয়াড ভাল মন্তব্য করেছেন, তবে ট্র্যাভিস জে কীভাবে ধারণা / নীতিটি ব্যাখ্যা করেছেন তা আমি সত্যিই পছন্দ করি। :)
Sander

5
এটি সেরা মন্তব্য - fn কেবলমাত্র একটি উপনাম জানা জেনে কারও যত্ন নেওয়া উচিত তা জেনেও প্রায় দরকারী নয় এবং এই উত্তরটি এটি সুন্দরভাবে দেখিয়েছে।
জেরার্ড ওনিল

1
অন্যান্য উত্তরের মধ্য দিয়ে যাওয়ার পরে, আমি এইটিকে মূল ধারণাটি বোঝার পক্ষে সহজ বলে মনে করেছি। ধন্যবাদ. :)
বিবেক

0

JQuery সোর্স কোডে আমাদের jQuery.fn = jQuery.prototype = {...}যেহেতু jQuery.prototypeএকটি অবজেক্ট রয়েছে তার মানটি jQuery.fnকেবল একই বস্তুর jQuery.prototypeরেফারেন্স হবে যা ইতিমধ্যে রেফারেন্স করে।

এটি নিশ্চিত করার জন্য আপনি পরীক্ষা করতে jQuery.fn === jQuery.prototypeপারেন যে trueএটি যদি মূল্যায়ন করে (যা এটি করে) তবে তারা একই বস্তুর রেফারেন্স দেয়

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.