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.
Trả lời 5025CBC585E09D00020488B2
0 phiếu bầu
Permalink
Sau khi khai báo một biến hoặc chức năng với từ khóa var
, bạn có thể gọi nó bất cứ lúc nào bằng cách gọi tên của nó.
Variable:
var name = "Eric";
name; // => 'Eric'
Function:
var printName = function[name]{
console.log[name];
}
printName["Eric"]; // prints 'Eric' to the console
điểm
Gửi bởi Eric Weinstein
khoảng 10 năm
Làm thế nào để bạn gọi một hàm bên trong một biến trong JavaScript?
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; };
Bạn có thể gán một hàm cho một biến trong JavaScript không?
Bạn có thể làm việc với các chức năng như thể chúng là đối tượng. Ví dụ: bạn có thể gán các hàm cho các biến, cho các thành phần mảng và cho các đối tượng khác. Chúng cũng có thể được truyền xung quanh như là đối số cho các chức năng khác hoặc được trả lại từ các chức năng đó. Sự khác biệt duy nhất với các đối tượng là các chức năng có thể được gọi.
Tôi có thể gọi một chức năng trong JavaScript không?
Phương thức Call [] là phương thức 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.
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"}
firstName:"John",
lastName: "Doe",
fullName: function [] {
return this.firstName + " " + this.lastName;
}
}
// Điều này sẽ trả lại "John Doe": person.fullname.call [person1];
person.fullName[];
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:person object.
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"} means the firstName property of this.
// Điều này sẽ trả lại "Mary Doe" person.fullname.call [person2];
Phương thức gọi [] với các đối số means the firstName property of person.
Phương thức call[]
có thể chấp nhận các đối số:this?
const person = {& nbsp; fullName: function [thành phố, quốc gia] {& nbsp; & nbsp; & nbsp; trả về this.firstname + "" + this.lastName + "," + city + "," + quốc gia; & nbsp; }}object.
const person1 = {& nbsp; & nbsp; firstName: "john", & nbsp; & nbsp; lastName: "doe"} object depends on how
var name = "Eric";
name; // => 'Eric'
0 is being invoked [used or called].person.fullname.call [person1, "oslo", "norway"];
Làm thế nào để bạn gọi một hàm bên trong một biến trong JavaScript?object. |
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; };global object. |
Bạn có thể gán một hàm cho một biến trong JavaScript không?global object. |
Bạn có thể làm việc với các chức năng như thể chúng là đối tượng. Ví dụ: bạn có thể gán các hàm cho các biến, cho các thành phần mảng và cho các đối tượng khác. Chúng cũng có thể được truyền xung quanh như là đối số cho các chức năng khác hoặc được trả lại từ các chức năng đó. Sự khác biệt duy nhất với các đối tượng là các chức năng có thể được gọi. |
Trong một sự kiện, 0 đề 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[] , 1 và 2 có thể giới thiệu 0 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; 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"}
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 "Mary Doe" person.fullname.call [person2];
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:
Thí dụ
Thí dụ
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"}
fullName: function[city, country] {
return this.firstName + " " + this.lastName + "," + city + "," +
country;
}
}
// Điều này sẽ trả lại "Mary Doe" person.fullname.call [person2];
firstName:"John",
lastName: "Doe"
}
Phương thức gọi [] với các đối số
Hãy tự mình thử »