ক্লায়েন্ট ব্রাউজারগুলির সাথে একটি বৃহত সামঞ্জস্যের প্রয়োজনে উত্পাদন কোডের জন্য আমি Object.keys
পুরানো ব্রাউজারগুলিতে নিশ্চিত করার জন্য উপরে ইভান নেভোস্ট্র্রুভের উত্তরটি শিমের সাথে প্রস্তাব করি । তবে ইসিএমএর নতুন defineProperty
বৈশিষ্ট্যটি ব্যবহার করে অনুরোধ করা সঠিক কার্যকারিতা পাওয়া সম্ভব ।
ECMAScript 5 হিসাবে - অবজেক্ট.ডাইফাইনপ্রোপার্টি
ইসিএমএ 5 হিসাবে আপনি অগণনীয় Object.defineProperty()
বৈশিষ্ট্য সংজ্ঞায়িত করতে ব্যবহার করতে পারেন । বর্তমান সামঞ্জস্য এখনও অনেক আকাঙ্ক্ষিত করা হয়েছে, কিন্তু এই শেষ পর্যন্ত সব ব্রাউজারে ব্যবহারযোগ্য হওয়া উচিত। (আইই 8 এর সাথে বিশেষত বর্তমানের অসঙ্গতি নোট করুন!)
Object.defineProperty(Object.prototype, 'keys', {
value: function keys() {
var keys = [];
for(var i in this) if (this.hasOwnProperty(i)) {
keys.push(i);
}
return keys;
},
enumerable: false
});
var o = {
'a': 1,
'b': 2
}
for (var k in o) {
console.log(k, o[k])
}
console.log(o.keys())
# OUTPUT
# > a 1
# > b 2
# > ["a", "b"]
তবে, যেহেতু ইসিএমএ 5 ইতিমধ্যে যুক্ত করেছে Object.keys
আপনি পাশাপাশি ব্যবহার করতে পারেন:
Object.defineProperty(Object.prototype, 'keys', {
value: function keys() {
return Object.keys(this);
},
enumerable: false
});
আসল উত্তর
Object.prototype.keys = function ()
{
var keys = [];
for(var i in this) if (this.hasOwnProperty(i))
{
keys.push(i);
}
return keys;
}
সম্পাদনা: যেহেতু এই উত্তরটি কিছুক্ষণের জন্য হয়ে গেছে আমি উপরেরটি অচ্ছুত রেখে দেব। যে কেউ এটি পড়ছেন তার নীচের নীচে ইভান নেভোস্ট্র্রুভের উত্তরটিও পড়তে হবে।
প্রোটোটাইপ ফাংশনগুলিকে অগণনীয় করে তোলার কোনও উপায় নেই যা তাদের সর্বদা ব্যবহার না করে এমন ইন-লুপগুলিতে সরিয়ে নিয়ে যায় hasOwnProperty
। আমি এখনও মনে করি যদি অবজেক্টের প্রোটোটাইপটি প্রসারিত করা এত অগোছালো না হত তবে এই উত্তরটি আদর্শ হবে।