मैं कुछ एक्शनस्क्रिप्ट 3 कोड लिख रहा हूं जो रनटाइम पर निर्धारित ऑब्जेक्ट को विधि लागू करने का प्रयास करता है। Function.apply और Function.call दोनों के लिए AS3 दस्तावेज़ दोनों इंगित करते हैं कि उन कार्यों के लिए पहला तर्क वह ऑब्जेक्ट है जिसे फ़ंक्शन निष्पादित होने पर 'इस' मान के रूप में उपयोग किया जाएगा।फ़ंक्शन। इस एआरजी पैरामीटर का उपयोग न करें
हालांकि, मैंने पाया है कि सभी मामलों में जब कार्य निष्पादित किया जा रहा है, तो एक विधि है, लागू/कॉल करने के लिए पहला पैरामीटर उपयोग नहीं किया जाता है, और 'यह' हमेशा उस मूल वस्तु को संदर्भित करता है जिस पर वह विधि बंधी गई थी।
package
{
import flash.display.Sprite;
public class FunctionApplyTest extends Sprite
{
public function FunctionApplyTest()
{
var objA:MyObj = new MyObj("A");
var objB:MyObj = new MyObj("B");
objA.sayName();
objB.sayName();
objA.sayName.apply(objB, []);
objA.sayName.call(objB);
}
}
}
internal class MyObj
{
private var _name:String;
public function MyObj(name:String)
{
_name = name;
}
public function sayName():void
{
trace(_name);
}
}
आउटपुट::
A
B
A
A
ऊपर कोड के लिए एक मामूली संशोधन के एक इन-लाइन गुमनाम समारोह जो को संदर्भित करता है बनाने के लिए 'इस' से पता चलता है कि सही यहाँ कुछ उदाहरण कोड और इसके उत्पादन है व्यवहार तब होता है जब फ़ंक्शन लागू/कॉल किया जाता है वह बाध्य विधि नहीं है।
क्या मैं किसी विधि पर इसका उपयोग करने का प्रयास करते समय लागू/कॉल गलत उपयोग कर रहा हूं? AS3 प्रलेखन विशेष रूप से इस मामले के लिए कोड प्रदान करता है, तथापि:
myObject.myMethod.call(myOtherObject, 1, 2, 3);
अगर यह वास्तव में टूट गया है, वहाँ किसी भी काम के आसपास कार्यों में लक्ष्य तरीकों (जो काफी बदसूरत होगा मेरी राय में) करने के अतिरिक्त है?
मुझे यह कहना होगा कि अगर आपको इस तरह के कोडिंग की आवश्यकता है तो आप कुछ गलत कर रहे हैं। ऐसा करने से आप वास्तव में क्या करने की कोशिश कर रहे हैं? –
इसे मेरे अंत में परीक्षण किया। एक बग की तरह लगता है। जिरा में खोज करने का प्रयास करें: http://bugs.adobe.com/jira/browse और यदि आपको यह नहीं मिला है, तो इसे – divillysausages
सबमिट करें, यह भाषा बग नहीं है, लेकिन खराब लिखित दस्तावेज –