Thứ Hai, 11 tháng 3, 2013

Hàm apply() ,call() ,bind() và thuộc tính arguments,length,caller trong javascript

Đây là những hàm cũng ít người quan tâm tới ,tuy nhiên nếu nghiên cứu sâu nó sẽ giúp ích rất nhiều cho bạn đó:
Hàm call() dùng để gọi một method trong một object và các object thay thế cho object hiện hành ,với các tham số thông qua .
Cú pháp :
call([thisObj[, arg1[, arg2[, [, argN]]]]])
thisObj: Object được dùng như object hiện hành.Nếu để trống nó sẽ lấy Object global thay thế.
arg các tham số thông qua.

Một ví dụ dễ hiều :

Kết quả là đầu tiên nó sẽ đưa alert(10) bởi vì đối tượng thí trong function f() sẽ trỏ đối tượng global,lúc này x=10 sẽ được gọi ,sau đó sẽ alert(15) vì ta đã khởi động hàm f() với object o lúc này this sẽ trỏ tới o nên this.x=15.

_ Hàm apply()chức năng giống như hàm call() ,khác biệt là apply() yêu cầu tham số thứ hai phải là một mảng .
Một ví dụ dễ hiểu nhất:


Như bạn thấy đầu tiên nó sẽ gọi hàm g và thông qua các giá trị object,func,args.func lúc này sẽ là f1,giá trị thông qua sẽ là một mảng có 1 phần tử ["the value of x = "].Lúc này hàm f1 sẽ đựơc gọi thông qua apply() .Vì ta có thông qua o={x:15} là object nên tới function f1 ,this.x đươc hiểu như là object của o ,kết quả là :the value of x =15
Cũng tương tự vậy,chỉ khác là cách gọi thứ 2 thông qua mảng 2 phần tử,vậy f2 cần có 2 biến.Giá trị trả lại sẽ là: the value of x squared = 255 Wow!.
Hàm apply() trông có vẻ hiêu quả hơn trong nhiều trường hợp.


_Thuộc tính arguments dùng lấy tham số của object function thực thi nó :
Ví dụ:


Nó chỉ alert(H) vì hàm chỉ thông qua 1 tham số,nên nó sẽ lấy arguments[0]lúc này là H.
Tiếp theo:

Lúc này nó sẽ in ra Hello ,vì lúc đó mình nạo vét hết toàn bộ tham số đầu vào để nối chúng lại.

Thuộc tính length để xác định sô lương tham số thông qua một hàm :
Ví dụ:

Nó sẽ ra : Expected Arguments: 2
Passed Arguments: 2


Hàm bind() dùng để tạo hàm ràng buộc ,sao chép lại thân của hàm được gán.
Cú pháp:

function: là hàm cần sao chép.
thisArg là object sẽ gán tới this cho hàm sao chép .
arg : các tham số thông qua.
Ví dụ:

Kết quả là true.


Thuộc tính caller dùng để lấy tên hàm nào đã khởi động hàm này.
Ví dụ:

Nó sẽ in ra function writesub() { write(); } tức là sẽ in ra toàn bộ function đã khởi động nó.
Nếu caller đựơc đặt trong function hoạt động độc lập ,ko có hàm nào goi nó,thì nó đang ở top level of a JavaScript program ,caller lúc này sẽ trả lại null.
Ví dụ:

Nó sẽ in ra:CallLevel was called from the top level.

Không có nhận xét nào:

Đăng nhận xét