Làm cách nào để gọi một hàm JavaScript từ một chuỗi mà không cần sử dụng eval?

eval[] là một hàm toàn cục trong JavaScript để đánh giá một chuỗi được chỉ định dưới dạng mã JavaScript và thực thi nó

eval["alert['this is executed by eval[]']"];

Hàm eval[] cũng có thể gọi hàm và nhận được kết quả như hình bên dưới

var result;

function Sum[val1, val2]
{
    return val1 + val2;
}

eval["result = Sum[5, 5];"];

alert[result];

eval có thể chuyển đổi chuỗi thành đối tượng JSON

var str = '[{"firstName":"Bill","lastName":"Gates"}]';

var obj = eval[str];

obj.firstName; // Bill 

sự giới thiệu

Không nên sử dụng eval[] vì nó chậm, không an toàn và khiến mã không thể đọc được và không thể bảo trì

Tôi đang tìm cách chuyển đổi chuỗi thành lệnh gọi hàm mà không cần sử dụng eval. Lý do cho điều này là tôi đang sử dụng Json để lưu trữ Quy tắc định giá thẩm định và đôi khi quy tắc này phức tạp đến mức nó phải nằm trong một chức năng chuyên dụng. Vì vậy, tôi quyết định chỉ sử dụng chức năng tiêu chuẩn với hai tham số. Quy tắc sẽ giống như sau

    {

     clients: ["Client 1", "Client 4", "Client 3"],

     riskKey: "Risk_Key_XYZ",

     riskCriteriaTempl: "['{0}' === 'Full' && '{1}' === 'No']",

     riskRuleFields: ["FORM_TYPE", "other_land_conforms"],

     highlightFields: [1],

     riskProcessFunc: "xyz_function[]",

     riskFuncFields: {field1:"field1", field2:"field2"},

     riskLevel: "High",

     riskName_en: "Risk Name English",

     riskName_fr: "Risk Name French",

   }

Vì vậy, về cơ bản, thuộc tính "riskProcessFunc" sẽ có tên hàm và thay vì sử dụng định dạng này

{

rủi roQuy trìnhChức năng. function [riskFields] {return xyz_function[this, riskFields]}

}

Tôi sẽ sử dụng định dạng đơn giản hóa này để sau đó có thể dễ dàng lưu trữ trong Cơ sở dữ liệu hoặc Trang tính Excel

{

rủi roQuy trìnhChức năng. "xyz_function[]"

}

Để làm cho nó rõ ràng, sử dụng mẫu dưới đây

function complexRule_xyz[a, b] {

    console.println["It is working: " + a + ", " + b];

    return "Yes!";

}

var funcName = "complexRule_xyz";

var myFn1 = new Function["p1", "p2", "return p1 + ', ' + p2"];

var myFn2 = new Function["p1", "p2", "return " + funcName + "[p1, p2]"];

var myFn3 = eval[funcName];

myFn1["po", "we"];

myFn2["er", "rt"]

myFn3["tr", "yu"];

Hãy thử thực hiện thao tác trên bằng Bảng điều khiển [ctrl-j] trong Adobe Acrobat và bạn sẽ thấy rằng "myFn2[]" sẽ không hoạt động. Tốt nhất là sử dụng "eval[]"

Vì vậy, giới thiệu. đến bài viết trên, điểm mấu chốt là làm thế nào để sử dụng đối tượng "cửa sổ" từ Adobe LiveCycle Designer Javascript?

Trong bài viết này, chúng ta sẽ gọi một hàm từ chuỗi được lưu trữ trong một biến. Có hai phương pháp để gọi một hàm từ một chuỗi được lưu trữ trong một biến.  

  • Sử dụng phương pháp đối tượng cửa sổ
  • Sử dụng phương thức eval[]

Ghi chú. Phương thức eval[] cũ hơn và không được dùng nữa.  

Phương pháp 1. Sử dụng đối tượng cửa sổ

Đối tượng cửa sổ trong HTML 5 tham chiếu đến cửa sổ hiện tại và tất cả các mục chứa trong đó. Do đó chúng ta có thể sử dụng nó để chạy một hàm trong một chuỗi cùng với các tham số cho hàm.  

cú pháp

window[functionName][parameters]

Thí dụ. Ví dụ này giải thích cách tiếp cận được sử dụng ở trên

html




    GeeksforGeeks

eval[stringFunction]
0_______21_______>

eval[stringFunction]
3

    

eval[stringFunction]
8

    

eval[stringFunction]
3

eval[stringFunction]
3

    "color: green"9

>0>1

>2>3

    >5

>6

    >8

>0    0

>0    2

>0    4

    >5

eval[stringFunction]
0_______24_______3>

đầu ra

 

Phương pháp 2. Sử dụng phương thức eval[]

Phương thức khác có thể được sử dụng là phương thức eval[]. Chuỗi có thể được truyền vào hàm có thể bao gồm một biểu thức JavaScript, câu lệnh hoặc một chuỗi các câu lệnh. Nó cũng có thể có các biến và thuộc tính của các đối tượng hiện có. Vấn đề duy nhất với phương pháp này là nó được coi là không an toàn và có thể không được hỗ trợ bởi các trình duyệt mới hơn.  

Tôi có thể sử dụng cái gì thay cho eval trong JavaScript?

Một thay thế cho eval là Function[] . Cũng giống như eval[] , Function[] nhận một biểu thức nào đó dưới dạng một chuỗi để thực thi, ngoại trừ, thay vì xuất kết quả trực tiếp, nó trả về một hàm ẩn danh cho bạn mà bạn có thể gọi. `Function[] là một giải pháp thay thế nhanh hơn và an toàn hơn cho eval[].

Làm cách nào để gọi hàm dựa trên chuỗi trong JavaScript?

Có hai phương pháp để gọi một hàm từ một chuỗi được lưu trữ trong một biến. .
Sử dụng phương pháp đối tượng cửa sổ
Sử dụng phương thức eval[]

3 cách gọi hàm trong JS là gì?

Có thể gọi các hàm JavaScript. .
Là một chức năng
Là một phương pháp
Là một nhà xây dựng
thông qua cuộc gọi và áp dụng

Tại sao không sử dụng eval trong JavaScript?

Trình thông dịch JavaScript hiện đại chuyển đổi JavaScript thành mã máy. Điều này có nghĩa là mọi khái niệm về cách đặt tên biến đều bị xóa sạch. Do đó, bất kỳ việc sử dụng eval[] nào cũng sẽ buộc trình duyệt thực hiện tra cứu tên biến tốn kém dài dòng để tìm ra vị trí tồn tại của biến trong mã máy và đặt giá trị của nó.

Chủ Đề