| | Function

Function prototype: bind, apply và call

@
Function prototype là prototype của tất cả các Function trong JavaScript, ngoài các chức năng có sẵn như bind, apply và call thì bạn vẫn có thể tạo thêm các chức năng mới nữa.

Prototype của Function:
  • length
  • Số lượng biến cần khai báo trong Function.
  • name
  • Trả lại tên của Function.
  • toString()
  • Chuyển function sang dạng chuỗi (String).
  • bind, apply, call
  • Xem chi tiết phía dưới.

Thêm chức năng vào prototype của Function:
Function.prototype.test = function(){
return this
}
var res = function(){/**/}.test();
//res == function() {/**/}

Đối tượng “this” trong Function:
Đối tượng “this” bên trong một Function được hiểu là đối tượng mẹ của Function đó, mặc định sẽ là đối tượng window.

Code ví dụ:
function abc(){
return this
}
var fun_1 = abc();
//fun_1 == [object Window]
var obj = {};
obj.abc = function(){
return this
};
var fun_2 = obj.abc();
//fun_2 == [object Object]
//fun_2 ở đây chính là đối tượng “obj“ ở phía trên

Ví dụ với bind, hàm “bind” sẽ trả lại một Function mới với đối tượng this đã được thay đổi.
var a = {
stt: 1,
fun: function(){
return this.stt
}};
var aa = a.fun();
//aa == 1
var b = {stt: 2};
var new_fun = a.fun.bind(b);
var bb = new_fun();
//bb == 2

Ví dụ với apply, hàm “apply” có 2 biến cần truyền giá trị vào, 1 là đối tượng “this” mới (nếu để là null thì đối tượng this vẫn được giữ nguyên), 2 là một mảng chứa các giá trị để truyền vào function đó, hàm này và hàm “call” sẽ chạy luôn function nhé.
var a = {
stt: 1,
fun: function(num){
return (this.stt + num)
}};
var aa = a.fun(10);
//aa == 11
var b = {stt: 2};
var bb = a.fun.apply(b, [10]);
//bb == 12

Ví dụ với call, hàm này khá giống với hàm “apply”, nhưng các biến được truyền vào là không xác định, biến 1 vẫn là đối tượng “this” mới, còn các biến tiếp theo chính là các giá trị để truyền vào function đó.
var a = {
stt: 1,
fun: function(num){
return (this.stt + num)
}};
var aa = a.fun(10);
//aa == 11
var b = {stt: 2};
var bb = a.fun.call(b, 10);
//bb == 12
  this.alter   ·   0   ·  
😂Smileys List   ·   ×