2011-03-17 12 views
15

अरे कहा जाता है कि हर कोई, यह जॉन Resig उन्नत जावास्क्रिप्ट http://ejohn.org/apps/learn/#23 से # 23 है,जावास्क्रिप्ट - एक वस्तु संपत्ति के रूप में समारोह

What happens if a function is an object property.

1) शब्दावली के बारे में, चर कटाना वस्तु है, सही? यदि अनाम कार्य उसकी संपत्ति है, तो "उपयोग" क्या कहा जाता है? मैंने सोचा कि "उपयोग" को संपत्ति भी कहा जाएगा? या "ऑब्जेक्ट" भी एक ऑब्जेक्ट है क्योंकि इसमें एक मान है, अर्थात् एक फ़ंक्शन?

2)। क्या कार्य बदलने का उद्देश्य है सरप: सत्य के लिए सच है: झूठा? क्या करता है! यह.इस सरप ठीक है?

3) जब यह दावा करता है! Katana.isSharp, वास्तव में यह क्या कह रहा है? क्या शार्प अब "झूठी" पर सेट हो गया है?

var katana = { 
    isSharp: true, 
    use: function(){ 
    this.isSharp = !this.isSharp; 
    } 
}; 
katana.use(); 
assert(!katana.isSharp, "Verify the value of isSharp has been changed."); 

उत्तर

20
  1. हाँ, katana एक वस्तु ({ ... } संकेतन का उपयोग कर बनाया) है। "उपयोग" उस ऑब्जेक्ट की संपत्ति का नाम है जिसका मान अज्ञात फ़ंक्शन होगा (जो एक ऑब्जेक्ट भी है)।

  2. समारोह (true से इतना false या true को false करने के लिए) isSharp का मूल्य उलट।

  3. यह जताने की जाती है कि isSharp कुछ जो सच के रूप में मूल्यांकित नहीं करता है (यह सब कुछ undefined, null, false, 0, आदि को छोड़कर लगभग है)। इस मामले में, isSharp हमेशा true या false है, यह दावा कर रहा है कि यह false है।

    katana.use(); 
    

    यह पहली (कि katana.use हिस्सा है) katana वस्तु से संपत्ति "का उपयोग" का मान हासिल करेगा:

नमूना का मुख्य बिंदु (और शांत भाग) इस लाइन है । मान पहले से अज्ञात कार्य है। फिर, वह फ़ंक्शन निष्पादित किया जाता है (वह () भाग है)। वास्तव में अच्छा हिस्सा यह है कि ऑब्जेक्ट की तरफ से निष्पादित किया गया है - इसका मतलब है कि अज्ञात फ़ंक्शन में thiskatana ऑब्जेक्ट का संदर्भ है जब इसे इस तरह कहा जाता है।

+0

यह जोर दे रहा है कि शार्प "झूठा" है! झूठा और सच नहीं (स्पष्ट रूप से) अलग हैं। – Raynos

+0

@ रेनोस: हे, हाँ, यही कारण है कि मैंने "सत्य नहीं" के बजाय "सत्य नहीं" रखा है। यह समझ में आता है कि यदि आप "कुछ गलत नहीं है" के रूप में सत्य को परिभाषित करते हैं :-) मैं इसे कम अस्पष्ट बना दूंगा, यह इंगित करने के लिए धन्यवाद कि – Cameron

+0

आपको बहुत धन्यवाद। आप कहते हैं कि अच्छा हिस्सा यह है कि इसे कटाना ऑब्जेक्ट की ओर से निष्पादित किया जाता है। यह अच्छा क्यों है? क्या कुछ व्यावहारिक लाभ पैदा करता है? यदि हां, तो यह व्यावहारिक लाभ क्या है? – mjmitche

1

1) Katana एक वस्तु है। Katana.use एक समारोह है। यह एक ऐसी संपत्ति है जिसमें फ़ंक्शन के रूप में कार्य होता है। इसमें शामिल एक अज्ञात फ़ंक्शन होता है।

भेद यह है कि Katana.useKatana की एक संपत्ति है और Katana.use का मान एक कार्य है। useKatana पर Katana["use"] से भी एक कुंजी परिभाषित है।

2) यह तो या तो सही नहीं isSharp को isSharp सेट करता है -> झूठी या गलत -> सच

3) ज़ोर katana.isSharp === false कह रहा है के बाद से यह orginally सच है, लेकिन फिर गलत पर सेट था जो यह होना चाहिए।

1
  1. use ऑब्जेक्ट katana ऑब्जेक्ट की एक संपत्ति है।
  2. ! This.isSharp this.isSharp के मान को अस्वीकार कर देगा। पूर्व अगर शार्प सत्य है तो यह झूठी वापसी करेगा और यह झूठी वापसी होगी।
  3. जोरदार जांच करता है कि बूलियन परिणाम का परिणाम सच है या नहीं। यदि परिणाम गलत है तो दावा विफल रहता है।
संबंधित मुद्दे