Hướng dẫn create dynamic function name javascript - tạo tên hàm động javascript

Cú pháp

javascript: alert(
  new function(a){
    this.f=eval("instance:"+a+"="+function(){})
  }("A") . toSource()
);
alert(eval("instance:A"));
1 ngụ ý một đối tượng với các giá trị thuộc tính là chức năng,
javascript: alert(
  new function(a){
    this.f=eval("instance:"+a+"="+function(){})
  }("A") . toSource()
);
alert(eval("instance:A"));
2, được lập chỉ mục bởi tên,
javascript: alert(
  new function(a){
    this.f=eval("instance:"+a+"="+function(){})
  }("A") . toSource()
);
alert(eval("instance:A"));
3. Do đó
javascript: alert(
  new function(a){
    this.f=eval("instance:"+a+"="+function(){})
  }("A") . toSource()
);
alert(eval("instance:A"));
4.
Thus
javascript: alert(
  new function(a){
    this.f=eval("instance:"+a+"="+function(){})
  }("A") . toSource()
);
alert(eval("instance:A"));
4.

javascript: alert(
  new function(a){
    this.f=eval("instance:"+a+"="+function(){})
  }("A") . toSource()
);
alert(eval("instance:A"));
5 sẽ bảo tồn nhận dạng tên chức năng. Xem ghi chú dưới đây về
javascript: alert(
  new function(a){
    this.f=eval("instance:"+a+"="+function(){})
  }("A") . toSource()
);
alert(eval("instance:A"));
6.

So,

javascript: alert(
  new function(a){
    this.f={"instance:1":function(){}, "instance:A":function(){}} ["instance:"+a]
  }("A") . toSource()
);

Hiển thị

javascript: alert(
  new function(a){
    this.f=eval("instance:"+a+"="+function(){})
  }("A") . toSource()
);
alert(eval("instance:A"));
7 trong Firefox. .
(This is almost the same idea as this solution, only it uses a generic object and no longer directly populates the window object with the functions.)

Phương pháp này rõ ràng cư trú môi trường với

javascript: alert(
  new function(a){
    this.f=eval("instance:"+a+"="+function(){})
  }("A") . toSource()
);
alert(eval("instance:A"));
8.

javascript: alert(
  new function(a){
    this.f=eval("instance:"+a+"="+function(){})
  }("A") . toSource()
);
alert(eval("instance:A"));

Hiển thị

({f:(function () {})})

function () {
}

Mặc dù hàm tài sản

javascript: alert(
  new function(a){
    this.f=eval("instance:"+a+"="+function(){})
  }("A") . toSource()
);
alert(eval("instance:A"));
9 tham chiếu một
({f:(function () {})})
0 chứ không phải
javascript: alert(
  new function(a){
    this.f=eval("instance:"+a+"="+function(){})
  }("A") . toSource()
);
alert(eval("instance:A"));
8, phương pháp này tránh được một số vấn đề với giải pháp này.

javascript: alert(
  new function(a){
    eval("this.f=function instance"+a+"(){}")
  }("A") . toSource()
);
alert(instanceA);    /* is undefined outside the object context */

Chỉ hiển thị

({f:(function instanceA() {})})
  • javascript: alert(
      new function(a){
        this.f=eval("instance:"+a+"="+function(){})
      }("A") . toSource()
    );
    alert(eval("instance:A"));
    
    6 nhúng làm cho JavaScript
    ({f:(function () {})})
    
    3 không hợp lệ.
  • Thay vì tham chiếu, định nghĩa văn bản thực tế của hàm được phân tích cú pháp và giải thích bởi
    ({f:(function () {})})
    
    4.

Những điều sau đây không nhất thiết là vấn đề,

  • Hàm
    ({f:(function () {})})
    
    5 không có sẵn trực tiếp để sử dụng làm
    ({f:(function () {})})
    
    6

Và vì vậy phù hợp hơn nhiều với bối cảnh vấn đề ban đầu.

Đưa ra những cân nhắc này,

this.f = {"instance:1": function instance1(){},
          "instance:2": function instance2(){},
          "instance:A": function instanceA(){},
          "instance:Z": function instanceZ(){}
         } [ "instance:" + a ]

Duy trì môi trường điện toán toàn cầu với ngữ nghĩa và cú pháp của ví dụ OP càng nhiều càng tốt.

Hướng dẫn create dynamic function name javascript - tạo tên hàm động javascript

Giả sử bạn đang viết một số chức năng bậc cao hơn trả về các chức năng khác. Trong trường hợp của tôi, đó là một tiện ích tạo ra một cái móc được đánh máy để tiêu thụ một số bối cảnh.

Tôi muốn để người tiêu dùng của tiện ích này có một thuộc tính

({f:(function () {})})
7 hợp lý trên hook được trả về, chứ không phải một số tên mã thư viện chung như
({f:(function () {})})
8.

Nỗ lực đầu tiên không hoạt động.

const someFunc = () => { ... }
someFunc.name = someConfig.name

Nhập chế độ FullScreenen EXIT Mode FullScreen

Bạn nhận được một lỗi tốt ít nhất.

Hướng dẫn create dynamic function name javascript - tạo tên hàm động javascript

Vì vậy, sau đó tôi nghĩ cho bản thân mình 🤔 Tôi có biết gì về việc đặt tên năng động nói chung trong JavaScript không?

💡

Đối tượng có thể có các khóa động! Với dấu ngoặc vuông, chúng ta có thể xâu chuỗi các giá trị thời gian chạy.

{ [someVar]: "woohoo" }

Nhập chế độ FullScreenen EXIT Mode FullScreen

Vì vậy, để giải quyết vấn đề tên hàm có thể định cấu hình của tôi, tôi đã sử dụng các khóa tính toán để tạo một đối tượng và các khóa tính toán một lần nữa để phá hủy giá trị hàm.

🤯 Phải không?

const custom = "Jerome"
const { [custom]: someFunc } = { [custom]: () => void 0 }
someFunc.name === "Jerome" // true

Nhập chế độ FullScreenen EXIT Mode FullScreen

^ Bạn có thể thử ví dụ đó trong bảng điều khiển trình duyệt của bạn.

Thứ khá gọn gàng! Đây là giải pháp cuối cùng của tôi, lấy cảm hứng từ sự gian lận này.

javascript: alert(
  new function(a){
    this.f=eval("instance:"+a+"="+function(){})
  }("A") . toSource()
);
alert(eval("instance:A"));
0

Nhập chế độ FullScreenen EXIT Mode FullScreen

Làm thế nào để bạn đặt tên cho một chức năng động?

Điều này về cơ bản sẽ làm điều đó ở cấp độ đơn giản nhất: "Sử dụng nghiêm ngặt"; var name = "foo"; var func = function new ("hàm trả về" + name + "() {alert ('ngọt!')}") (); // gọi nó, để kiểm tra nó func (); Nếu bạn muốn nhận được nhiều lạ mắt hơn, tôi có một bài viết viết về "Tên chức năng động trong JavaScript".use strict"; var name = "foo"; var func = new Function( "return function " + name + "(){ alert('sweet! ')}" )(); //call it, to test it func(); If you want to get more fancy, I have a written an article on "Dynamic function names in JavaScript".

Làm thế nào để bạn tạo một chức năng động?

Tạo hàm động đối tượng hàm cũng có thể được sử dụng làm hàm tạo hàm để tạo chức năng mới một cách nhanh chóng.Cú pháp để tạo một hàm từ đối tượng chức năng như sau: const myfunction = new function (arg1, arg2, ar argn, body);const myFunction = new Function(arg1, arg2, … argN, body);

Làm thế nào để bạn đặt tên cho một hàm trong javascript?

Hàm JavaScript được xác định với từ khóa chức năng, theo sau là tên, theo sau là dấu ngoặc đơn ().Tên chức năng có thể chứa các chữ cái, chữ số, dấu gạch dưới và dấu hiệu đô la (cùng quy tắc với các biến).Các dấu ngoặc đơn có thể bao gồm các tên tham số được phân tách bằng dấu phẩy: (tham số1, tham số2, ...)the function keyword, followed by a name, followed by parentheses (). Function names can contain letters, digits, underscores, and dollar signs (same rules as variables). The parentheses may include parameter names separated by commas: (parameter1, parameter2, ...)

Chức năng động trong JavaScript là gì?

Bản chất động của JavaScript có nghĩa là một hàm có thể không chỉ tự gọi, mà còn xác định chính nó và thậm chí tự xác định lại.Điều này được thực hiện bằng cách gán một hàm ẩn danh cho một biến có cùng tên với hàm.a function is able to not only call itself, but define itself, and even redefine itself. This is done by assigning an anonymous function to a variable that has the same name as the function.