Tôi đang viết một số mã Actioncript3 cố gắng áp dụng một phương thức cho đối tượng được xác định khi chạy. Tài liệu AS3 cho Function.apply và Function.call đều cho biết đối số đầu tiên cho các hàm đó là đối tượng sẽ được sử dụng làm giá trị 'this' khi hàm được thực hiện.Function.apply không sử dụng tham số nàyArg
Tuy nhiên, tôi đã thấy rằng trong mọi trường hợp khi hàm được thực hiện là phương thức, tham số đầu tiên áp dụng/cuộc gọi không được sử dụng và 'this' luôn đề cập đến đối tượng gốc mà phương thức đó đã bị ràng buộc. Dưới đây là một số ví dụ mã và đầu ra của nó:
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);
}
}
Output:
A
B
A
A
Một thay đổi nhỏ vào mã ở trên để tạo ra một in-line chức năng ẩn danh trong đó đề cập đến 'này' cho thấy đúng hành vi xảy ra khi hàm được áp dụng/gọi không phải là phương thức được ràng buộc.
Tôi có sử dụng áp dụng/gọi không chính xác khi tôi cố gắng sử dụng nó trên phương pháp không? Các tài liệu AS3 đặc biệt cung cấp mã cho trường hợp này, tuy nhiên:
myObject.myMethod.call(myOtherObject, 1, 2, 3);
Nếu đây thực sự là bị hỏng, là có bất kỳ công việc xung quanh bên cạnh làm cho phương pháp mục tiêu vào chức năng (đó sẽ là khá xấu xí, theo ý kiến của tôi)?
Tôi sẽ phải nói rằng bạn đang làm điều gì đó cực kỳ sai nếu bạn cần loại mã hóa này. Chính xác những gì bạn đang cố gắng thực hiện bằng cách làm điều này? –
Thử nghiệm nó trên đầu của tôi. có vẻ như một lỗi. Hãy thử tìm kiếm trong JIRA: http://bugs.adobe.com/jira/browse và nếu bạn không tìm thấy nó, hãy gửi nó – divillysausages
lỗi không phải ngôn ngữ của nó, nhưng tài liệu viết kém kém –