বেনামে অবজেক্টের কোনও পদ্ধতি আছে কিনা তা কীভাবে পরীক্ষা করবেন?


145

কোনও অনামী অবজেক্ট যেমন তৈরি করা হয়েছিল তা আমি কীভাবে পরীক্ষা করতে পারি:

var myObj = { 
    prop1: 'no',
    prop2: function () { return false; }
}

প্রকৃতপক্ষে একটি প্রস্তাব 2 সংজ্ঞা আছে?

prop2 সর্বদা একটি ফাংশন হিসাবে সংজ্ঞায়িত করা হবে, তবে কিছু বস্তুর জন্য এটি প্রয়োজন হয় না এবং সংজ্ঞায়িত করা হবে না।

আমি এখানে যা প্রস্তাবিত হয়েছিল তা চেষ্টা করেছিলাম: নেটিভ জাভাস্ক্রিপ্ট অবজেক্টের কোনও সম্পত্তি / পদ্ধতি আছে কিনা তা কীভাবে নির্ধারণ করা যায়? তবে আমি মনে করি না এটি বেনামেয় জিনিসগুলির জন্য কাজ করে।


6
জাভাস্ক্রিপ্টে বেনামে এবং অজ্ঞাতনামা বস্তুর মধ্যে খুব বেশি পার্থক্য নেই। তারা আচ্ছাদন অধীনে একই।
ভাভা

উত্তর:


278

typeof myObj.prop2 === 'function'; ফাংশন সংজ্ঞায়িত করা থাকলে আপনাকে জানাতে দেবে।

if(typeof myObj.prop2 === 'function') {
    alert("It's a function");
} else if (typeof myObj.prop2 === 'undefined') {
    alert("It's undefined");
} else {
    alert("It's neither undefined nor a function. It's a " + typeof myObj.prop2);
}

1
আপনি যদি গতিশীল ভেরিয়েবলের সাথে চেক করতে চান তবে এটি চেষ্টা করুনif(typeof myObj[propoeryStr] === 'function') { ... }
বিবেক

42

আপনি চান hasOwnProperty():

var myObj1 = { 
	prop1: 'no',
	prop2: function () { return false; }
}
var myObj2 = { 
	prop1: 'no'
}

console.log(myObj1.hasOwnProperty('prop2')); // returns true
console.log(myObj2.hasOwnProperty('prop2')); // returns false
	

তথ্যসূত্র: মজিলা , মাইক্রোসফট , phrogz.net


4
এই আপনি একটি আত্মকৃত বস্তুর মধ্যে একটি DOM নোড রেখেছি, যেমন যদি কাজ করবে না var my_obj = {'node1': document.createElement('div')};তখন my_obj.node1.hasOwnProperty('cloneNode')মিথ্যা। তবে শানের সমাধানটি সঠিকভাবে ফিরে আসবে:typeof my_obj.node1.cloneNode === 'function'
মুল্লহাউসন

6
আপনি যদি এমন কোনও পদ্ধতি সন্ধান করছেন যা প্রোটোটাইপে সংজ্ঞায়িত হয়েছিল।
উইল্ট

2
@ উইল্ট প্রশ্নটি বেনামে অবজেক্টকে আক্ষরিক উল্লেখ করেছে।
আর্টলং

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

2
সম্পত্তি সংজ্ঞায়িত ক্ষেত্রে কেস পরিচালনা করে না, তবে এটি কোনও ফাংশন নয়।
matt2000

15

3 বিকল্প

  1. typeof myObj.prop2 === 'function' যদি সম্পত্তিটির নামটি গতিশীল / উত্পন্ন না হয়
  2. myObj.hasOwnProperty('prop2') যদি সম্পত্তিটির নামটি গতিশীল হয় এবং কেবল এটি সরাসরি সম্পত্তি কিনা তা পরীক্ষা করুন (প্রোটোটাইপ শৃঙ্খলে নিচে নয়)
  3. 'prop2' in myObj যদি সম্পত্তিটির নামটি গতিশীল হয় এবং প্রোটোটাইপ চেইনটি পরীক্ষা করে দেখুন

8

"বেনামে অবজেক্ট" বলতে কী বোঝ? myObjআপনি কোনও ভেরিয়েবলকে আক্ষরিক অর্পণ করার কারণে আপনি বেনামে নেই। আপনি কেবল এটি পরীক্ষা করতে পারেন:

if (typeof myObj.prop2 === 'function')
{
    // do whatever
}


0

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

typeof myObj.prop2 === 'function'

তবে আপনি শর্ত হিসাবেও ব্যবহার করতে পারেন:

typeof myObj.prop2

অথবা এমনকি:

myObj.prop2

এটি এমনটি কারণ একটি ফাংশন মূল্যায়ন করে trueএবং এতে undefinedমূল্যায়ন করে false। সুতরাং যদি আপনি জানেন যে সদস্যটি বিদ্যমান থাকে তবে এটি কেবল কোনও ফাংশন হতে পারে, আপনি ব্যবহার করতে পারেন:

if(myObj.prop2) {
  <we have prop2>
}

বা একটি অভিব্যক্তি:

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