Thuộc tính
4 chỉ đọc của đối tượng cho biết tên của hàm được chỉ định khi nó được tạo hoặc nó có thể là // -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
5 hoặc // -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
6 [một chuỗi trống] cho các hàm được tạo ẩn danh.// -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
4 property indicates the function's name as specified when it was created, or it may be either // -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
5 or // -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
6 [an empty string] for functions created anonymously.// -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
Thử nó
Lưu ý: Trong các triển khai không chuẩn, Pre-ES2015, thuộc tính
7 cũng là // -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
8. In non-standard, pre-ES2015 implementations the // -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
// -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
7 attribute was // -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
8 as well.Sự mô tả
Thuộc tính
// -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
4 của chức năng có thể được sử dụng để xác định chức năng trong các công cụ gỡ lỗi hoặc thông báo lỗi. Nó không có ý nghĩa ngữ nghĩa đối với chính ngôn ngữ.Thuộc tính
// -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
4 chỉ được đọc và không thể thay đổi bởi toán tử gán:function someFunction[] {}
someFunction.name = 'otherFunction';
console.log[someFunction.name]; // someFunction
Để thay đổi nó, sử dụng
new Function[].name; // "anonymous"
1.Thuộc tính
// -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
4 thường được suy ra từ cách xác định hàm. Trong các phần sau, chúng tôi sẽ mô tả các cách khác nhau mà nó có thể được suy ra.Tuyên bố chức năng
Thuộc tính
// -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
4 trả về tên của một khai báo chức năng.function doSomething[] {}
doSomething.name; // "doSomething"
Tuyên bố chức năng xuất hiện mặc định
Tuyên bố
new Function[].name; // "anonymous"
4 xuất hàm dưới dạng khai báo thay vì biểu thức. Nếu tuyên bố là ẩn danh, tên là new Function[].name; // "anonymous"
5.// -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
Hàm tạo chức năng
Các chức năng được tạo với hàm tạo
new Function[].name; // "anonymous"
6 có tên là "ẩn danh".new Function[].name; // "anonymous"
Biểu thức chức năng
Nếu biểu thức hàm được đặt tên, tên đó được sử dụng làm thuộc tính
// -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
4.const someFunction = function someFunctionName[] {};
someFunction.name; // "someFunctionName"
Các biểu thức chức năng ẩn danh được tạo bằng cách sử dụng từ khóa
new Function[].name; // "anonymous"
8 hoặc các hàm mũi tên sẽ có new Function[].name; // "anonymous"
9 [một chuỗi trống] làm tên của chúng.[function [] {}].name; // ""
[[] => {}].name; // ""
Tuy nhiên, những trường hợp như vậy là rất hiếm - thông thường, để chỉ biểu thức ở nơi khác, biểu thức hàm được gắn vào một định danh khi nó được tạo [chẳng hạn như trong một khai báo biến]. Trong những trường hợp như vậy, tên có thể được suy ra, vì một vài tiểu mục sau đây chứng minh.
Một trường hợp thực tế trong đó tên không thể được suy ra là một hàm được trả về từ một hàm khác:
function getFoo[] {
return [] => {};
}
getFoo[].name; // ""
Khai báo và phương pháp biến
Các biến và phương thức có thể suy ra tên của một hàm ẩn danh từ vị trí cú pháp của nó.
const f = function [] {};
const object = {
someMethod: function [] {}
};
console.log[f.name]; // "f"
console.log[object.someMethod.name]; // "someMethod"
Điều tương tự áp dụng cho bài tập:
let f;
f = [] => {};
f.name; // "f"
Khởi tạo và giá trị mặc định
Các chức năng trong các bộ khởi tạo [giá trị mặc định] của phá hủy, tham số mặc định, trường lớp, v.v., sẽ kế thừa tên của định danh bị ràng buộc là
// -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
4 của chúng.const [f = [] => {}] = [];
f.name; // "f"
const { someMethod: m = [] => {} } = {};
m.name; // "m"
function foo[f = [] => {}] {
console.log[f.name];
}
foo[]; // "f"
class Foo {
static someMethod = [] => {};
}
Foo.someMethod.name; // someMethod
Phương pháp tốc ký
function doSomething[] {}
doSomething.name; // "doSomething"
0Chức năng ràng buộc
const someFunction = function someFunctionName[] {};
someFunction.name; // "someFunctionName"
1 tạo ra một hàm có tên là "ràng buộc" cộng với tên hàm.function doSomething[] {}
doSomething.name; // "doSomething"
1Getter và setter
Khi sử dụng các thuộc tính của
const someFunction = function someFunctionName[] {};
someFunction.name; // "someFunctionName"
2 và const someFunction = function someFunctionName[] {};
someFunction.name; // "someFunctionName"
3, "GET" hoặc "SET" sẽ xuất hiện trong tên hàm.function doSomething[] {}
doSomething.name; // "doSomething"
2Lớp
Tên của một lớp theo cùng một thuật toán như các khai báo và biểu thức hàm.
function doSomething[] {}
doSomething.name; // "doSomething"
3Cảnh báo: JavaScript sẽ đặt thuộc tính
4 của hàm chỉ khi một hàm không có thuộc tính riêng gọi là // -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
4. Tuy nhiên, các thành viên tĩnh của các lớp sẽ được đặt làm thuộc tính riêng của hàm xây dựng lớp và do đó ngăn chặn // -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
4 tích hợp được áp dụng. Xem một ví dụ dưới đây. JavaScript will set the function's // -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
// -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
4 property only if a function does not have an own property called // -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
4. However, classes'
static members will be set as own properties of the class constructor function, and thus prevent the built-in // -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
4 from being applied. See an example below.Biểu tượng là tên hàm
Nếu
const someFunction = function someFunctionName[] {};
someFunction.name; // "someFunctionName"
7 được sử dụng tên hàm và biểu tượng có mô tả, tên của phương thức là mô tả trong dấu ngoặc vuông.function doSomething[] {}
doSomething.name; // "doSomething"
4Tài sản cá nhân
Các trường riêng và các phương thức riêng có hàm băm [
const someFunction = function someFunctionName[] {};
someFunction.name; // "someFunctionName"
8] như một phần của tên của họ.function doSomething[] {}
doSomething.name; // "doSomething"
5Ví dụ
Nói tên hàm tạo của một đối tượng
Bạn có thể sử dụng
const someFunction = function someFunctionName[] {};
someFunction.name; // "someFunctionName"
9 để kiểm tra "lớp" của một đối tượng.function doSomething[] {}
doSomething.name; // "doSomething"
6Tuy nhiên, vì các thành viên tĩnh sẽ trở thành thuộc tính riêng của lớp, chúng tôi không thể có được tên lớp cho hầu như bất kỳ lớp nào có thuộc tính Phương thức tĩnh
[function [] {}].name; // ""
[[] => {}].name; // ""
0:function doSomething[] {}
doSomething.name; // "doSomething"
7Với phương thức
[function [] {}].name; // ""
[[] => {}].name; // ""
1 [function [] {}].name; // ""
[[] => {}].name; // ""
2 không còn giữ tên lớp thực tế mà là một tham chiếu đến đối tượng hàm [function [] {}].name; // ""
[[] => {}].name; // ""
0. Cố gắng để có được lớp [function [] {}].name; // ""
[[] => {}].name; // ""
4 thông qua [function [] {}].name; // ""
[[] => {}].name; // ""
5 sẽ không cho chúng tôi tên lớp, mà thay vào đó là một tham chiếu đến phương thức lớp tĩnh. Thí dụ:function doSomething[] {}
doSomething.name; // "doSomething"
8Do sự tồn tại của các trường tĩnh,
// -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
4 cũng có thể không phải là một hàm.function doSomething[] {}
doSomething.name; // "doSomething"
9Nếu một lớp có một thuộc tính tĩnh được gọi là
// -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
4, nó cũng sẽ trở nên có thể ghi được. Định nghĩa tích hợp trong trường hợp không có định nghĩa tĩnh tùy chỉnh chỉ được đọc:// -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
0Do đó, bạn không thể dựa vào thuộc tính
// -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
4 tích hợp để luôn giữ tên của một lớp.Máy nén JavaScript và máy tính
CẢNH BÁO: Hãy cẩn thận khi sử dụng thuộc tính
4 với các biến đổi mã nguồn, chẳng hạn như các biến đổi được thực hiện bởi máy nén JavaScript [minifi] hoặc obfuscators. Các công cụ này thường được sử dụng như một phần của đường ống xây dựng JavaScript để giảm quy mô của một chương trình trước khi triển khai nó để sản xuất. Các phép biến đổi như vậy thường thay đổi tên của một hàm tại thời điểm xây dựng. Be careful when using the // -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
// -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
4 property with source-code transformations, such as those carried out by JavaScript compressors [minifiers] or obfuscators. These tools are often used as part of a JavaScript
build pipeline to reduce the size of a program prior to deploying it to production. Such transformations often change a function's name at build time.Mã nguồn như:
// -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
1có thể được nén vào:
// -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
2Trong phiên bản không nén, chương trình chạy vào nhánh Truthy và ghi lại "'foo' là một ví dụ của 'foo'" - trong khi, trong phiên bản nén, nó hoạt động khác nhau và chạy vào nhánh khác. Nếu bạn dựa vào thuộc tính
// -- someModule.js --
export default function [] {};
// -- main.js --
import someModule from "./someModule.js";
someModule.name; // "default"
4, như trong ví dụ trên, hãy đảm bảo đường ống xây dựng của bạn không thay đổi tên chức năng hoặc không giả sử hàm có tên cụ thể.Thông số kỹ thuật
Đặc tả ngôn ngữ Ecmascript # Sec-Chế độ-INSTANCES-NAME # sec-function-instances-name |
Tính tương thích của trình duyệt web
Bảng BCD chỉ tải trong trình duyệt
Xem thêm
- Thuộc tính polyfill cho chức năng '
1 có sẵn trongfunction getFoo[] { return [] => {}; } getFoo[].name; // ""
2function getFoo[] { return [] => {}; } getFoo[].name; // ""
3// -- someModule.js -- export default function [] {}; // -- main.js -- import someModule from "./someModule.js"; someModule.name; // "default"