Function
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
* Some parts of this feature may have varying levels of support.
Đối tượng Function cung cấp các phương thức cho hàm (function). Trong JavaScript, mọi hàm thực chất đều là một đối tượng Function.
Constructor
Function()-
Tạo một đối tượng
Functionmới. Gọi constructor trực tiếp có thể tạo hàm động, nhưng gặp phải vấn đề bảo mật và hiệu suất tương tự (nhưng ít nghiêm trọng hơn đáng kể) so vớieval(). Tuy nhiên, khác vớieval(), constructorFunctiontạo ra các hàm chỉ thực thi trong phạm vi toàn cục (global scope).
Instance properties
Các thuộc tính này được định nghĩa trên Function.prototype và chia sẻ cho tất cả các instance của Function.
Function.prototype.argumentsDeprecated Non-standard-
Đại diện cho các đối số được truyền vào hàm. Với các hàm strict, arrow, async và generator, việc truy cập thuộc tính
argumentssẽ némTypeError. Hãy dùng đối tượngargumentsbên trong các closure của hàm thay thế. Function.prototype.callerDeprecated Non-standard-
Đại diện cho hàm đã gọi hàm hiện tại. Với các hàm strict, arrow, async và generator, việc truy cập thuộc tính
callersẽ némTypeError. Function.prototype.constructor-
Hàm constructor đã tạo ra đối tượng instance. Với các instance của
Function, giá trị ban đầu là constructorFunction.
Các thuộc tính sau là thuộc tính riêng của từng instance Function.
displayNameNon-standard Optional-
Tên hiển thị của hàm.
length-
Chỉ định số lượng đối số mà hàm mong đợi.
name-
Tên của hàm.
prototype-
Được dùng khi hàm được sử dụng như một constructor với toán tử
new. Nó sẽ trở thành prototype của đối tượng mới tạo ra.
Instance methods
Function.prototype.apply()-
Gọi một hàm với giá trị
thischo trước và các đối số tùy chọn được truyền dưới dạng mảng (hoặc đối tượng giống mảng). Function.prototype.bind()-
Tạo một hàm mới mà khi được gọi, từ khóa
thiscủa nó được đặt thành giá trị đã cung cấp, kèm theo một chuỗi đối số tùy chọn đứng trước bất kỳ đối số nào được cung cấp khi hàm mới được gọi. Function.prototype.call()-
Gọi một hàm với giá trị
thischo trước và các đối số tùy chọn. Function.prototype.toString()-
Trả về một chuỗi biểu diễn mã nguồn của hàm. Ghi đè phương thức
Object.prototype.toString. Function.prototype[Symbol.hasInstance]()-
Chỉ định quy trình mặc định để xác định xem một hàm constructor có nhận biết một đối tượng là instance của constructor đó hay không. Được gọi bởi toán tử
instanceof.
Examples
>Sự khác biệt giữa Function constructor và khai báo hàm
Các hàm được tạo bằng constructor Function không tạo closure gắn với ngữ cảnh tạo ra chúng; chúng luôn được tạo trong phạm vi toàn cục. Khi chạy, chúng chỉ có thể truy cập các biến cục bộ của chính mình và các biến toàn cục, không thể truy cập các biến từ phạm vi mà constructor Function được gọi. Điều này khác với việc dùng eval() với mã của một hàm expression.
// Create a global property with `var`
var x = 10;
function createFunction1() {
const x = 20;
return new Function("return x;"); // this `x` refers to global `x`
}
function createFunction2() {
const x = 20;
function f() {
return x; // this `x` refers to the local `x` above
}
return f;
}
const f1 = createFunction1();
console.log(f1()); // 10
const f2 = createFunction2();
console.log(f2()); // 20
Mặc dù code này hoạt động trên trình duyệt web, f1() sẽ gây ra ReferenceError trong Node.js vì x không được tìm thấy. Nguyên nhân là phạm vi cấp cao nhất trong Node không phải là phạm vi toàn cục, và x sẽ là cục bộ của module.
Specifications
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-function-objects> |