Chắc chắn tránh sử dụng eval
để làm một cái gì đó như thế này, hoặc bạn sẽ mở ra các lỗ hổng XSS [kịch bản chéo trang].
Ví dụ: nếu bạn sử dụng các giải pháp eval
được đề xuất ở đây, một người dùng bất chính có thể gửi một liên kết đến nạn nhân của họ trông như thế này:
//yoursite.com/foo.html?func=function[]{alert['Im%20In%20Teh%20Codez'];}
Và JavaScript của họ, không phải của bạn, sẽ được thực thi. Mã này có thể làm một cái gì đó tồi tệ hơn nhiều so với chỉ bật lên một cảnh báo; Nó có thể ăn cắp cookie, gửi yêu cầu đến ứng dụng của bạn, v.v.
Vì vậy, hãy chắc chắn rằng bạn không bao giờ eval
mã không đáng tin cậy xuất phát từ đầu vào của người dùng [và bất cứ điều gì trên ID chuỗi truy vấn được coi là đầu vào của người dùng]. Bạn có thể lấy đầu vào của người dùng làm khóa sẽ trỏ đến chức năng của mình, nhưng đảm bảo rằng bạn không thực thi bất cứ điều gì nếu chuỗi đưa ra không khớp với một khóa trong đối tượng của bạn. Ví dụ:
// set up the possible functions:
var myFuncs = {
func1: function [] { alert['Function 1']; },
func2: function [] { alert['Function 2']; },
func3: function [] { alert['Function 3']; },
func4: function [] { alert['Function 4']; },
func5: function [] { alert['Function 5']; }
};
// execute the one specified in the 'funcToRun' variable:
myFuncs[funcToRun][];
Điều này sẽ thất bại nếu biến funcToRun
không trỏ đến bất cứ điều gì trong đối tượng myFuncs
, nhưng nó sẽ không thực thi bất kỳ mã nào.
Có hai phương thức để gọi một hàm từ chuỗi được lưu trữ trong một biến. Phương pháp eval [] cũ hơn và nó không được dùng.
Làm thế nào để bạn gọi một hàm được gán cho một biến trong JavaScript?
Cú pháp. Người dùng có thể theo dõi cú pháp dưới đây để viết biểu thức cho hàm mũi tên. Biến const = [tham số của Google] => {// Chức năng cơ thể} Biến [tham số]; // Gọi hàm mũi tên.
Bạn có thể gọi một chức năng trong một biến không?
Chúng tôi đặt hàm vào một biến nếu bên trong khối hàm, chúng tôi sử dụng phương thức trả về: var multytwo = function [a] {return a * 2; }; Nếu chúng ta chỉ cần gọi chức năng này, sẽ không có gì được in, mặc dù không có gì sai với việc viết của chính chức năng.
Ví dụ dưới đây tạo ra một đối tượng với 3 thuộc tính, tên FirstName, lastName, fullName.
Thí dụ
const person = {& nbsp; & nbsp; firstName: "john", & nbsp; & nbsp; lastName: "doe", & nbsp; fullName: function [] {& nbsp; & nbsp; & nbsp; Trả về this.FirstName + "" + this.lastName; & nbsp; & nbsp;}}
firstName:"John",
lastName: "Doe",
fullName: function [] {
return this.firstName + " " + this.lastName;
}
}
// Điều này sẽ trả lại "John Doe": person.fullname [];
person.fullName[];
Hãy tự mình thử »
Trong ví dụ trên, this
đề cập đến đối tượng người.person object.
this.firstName có nghĩa là thuộc tính đầu tiên của điều này. means the firstName property of this.
Giống như:
this.firstName có nghĩa là thuộc tính đầu tiên của người. means the firstName property of person.
Cái này là cái gì?this?
Trong JavaScript, từ khóa this
đề cập đến một đối tượng.object.
Đối tượng nào phụ thuộc vào cách this
được gọi [được sử dụng hoặc gọi]. object depends on how this
is being invoked [used or called].
Từ khóa this
đề cập đến các đối tượng khác nhau tùy thuộc vào cách sử dụng:
Trong một phương thức đối tượng, this đề cập đến đối tượng.object.
|
Một mình, this đề cập đến đối tượng toàn cầu.global object.
|
Trong một chức năng, this đề cập đến đối tượng toàn cầu.global object.
|
Trong một hàm, ở chế độ nghiêm ngặt, this là eval 5. |
Trong một sự kiện, this đề cập đến yếu tố đã nhận được sự kiện.element that received the event.
|
Các phương thức như call[] , eval 8 và eval 9 có thể giới thiệu this cho bất kỳ đối tượng nào.any object.
|
Phương thức call [] call call []
Phương pháp call[]
là phương pháp JavaScript được xác định trước.
Nó có thể được sử dụng để gọi [gọi] một phương thức với một đối tượng chủ sở hữu làm đối số [tham số].
Với call[]
, một đối tượng có thể sử dụng một phương thức thuộc về một đối tượng khác.
Ví dụ này gọi phương thức FullName của người, sử dụng nó trên Person1:fullName method of person, using it on person1:
Thí dụ
const person = {& nbsp; & nbsp; fullName: function [] {& nbsp; & nbsp; & nbsp; & nbsp; return this.firstName + "" + this.lastName; & nbsp; & nbsp;}} const person1 = {& nbsp; & nbsp; firstName: "john", & nbsp; Tên cuối cùng: "doe"} const person2 = {& nbsp; tên đầu tiên: "Mary", & nbsp; Tên cuối cùng: "doe"}
fullName:
function[] {
return this.firstName + " " + this.lastName;
}
}
const person1 = {
firstName:"John",
lastName: "Doe"
}
const person2 = {
firstName:"Mary",
lastName: "Doe"
}
// Điều này sẽ trả lại "John Doe": person.fullname.call [person1];
person.fullName.call[person1];
Hãy tự mình thử »
Ví dụ này gọi phương thức FullName của người, sử dụng nó trên Person2:fullName method of person, using it on person2:
Thí dụ
const person = {& nbsp; & nbsp; fullName: function [] {& nbsp; & nbsp; & nbsp; & nbsp; return this.firstName + "" + this.lastName; & nbsp; & nbsp;}} const person1 = {& nbsp; & nbsp; firstName: "john", & nbsp; Tên cuối cùng: "doe"} const person2 = {& nbsp; tên đầu tiên: "Mary", & nbsp; Tên cuối cùng: "doe"}
fullName: function[] {
return this.firstName + " " + this.lastName;
}
}
const person1 = {
firstName:"John",
lastName: "Doe"
}
const person2 = {
firstName:"Mary",
lastName: "Doe"
}
// Điều này sẽ trả lại "John Doe": person.fullname.call [person1];
person.fullName.call[person2];
Hãy tự mình thử »
Ví dụ này gọi phương thức FullName của người, sử dụng nó trên Person2:
const person = {& nbsp; fullName: function [] {& nbsp; & nbsp; & nbsp; Trả về this.FirstName + "" + this.lastName; & nbsp; & nbsp;}} const person1 = {& nbsp; & nbsp; firstName: "john", & nbsp; Tên cuối cùng: "doe"} const person2 = {& nbsp; tên đầu tiên: "Mary", & nbsp; Tên cuối cùng: "doe"}
Thí dụ
const person = {& nbsp; & nbsp; fullName: function [] {& nbsp; & nbsp; & nbsp; & nbsp; return this.firstName + "" + this.lastName; & nbsp; & nbsp;}} const person1 = {& nbsp; & nbsp; firstName: "john", & nbsp; Tên cuối cùng: "doe"} const person2 = {& nbsp; tên đầu tiên: "Mary", & nbsp; Tên cuối cùng: "doe"}
fullName: function[city, country] {
return this.firstName + " " + this.lastName + "," + city + "," +
country;
}
}
// Điều này sẽ trả lại "John Doe": person.fullname.call [person1];
firstName:"John",
lastName: "Doe"
}
Hãy tự mình thử »
Hãy tự mình thử »