Có thể truyền một hàm javascript với các tham số là tham số không?
Thí dụ:
$(edit_link).click( changeViewMode( myvar ) );
Có thể truyền một hàm javascript với các tham số là tham số không?
Thí dụ:
$(edit_link).click( changeViewMode( myvar ) );
Câu trả lời:
Sử dụng "đóng cửa":
$(edit_link).click(function(){ return changeViewMode(myvar); });
Điều này tạo ra một trình bao bọc hàm tạm thời ẩn danh biết về tham số và chuyển nó đến thực hiện gọi lại thực tế.
this.myFunction = this.myFunction.bind(this)của mình constructor. Nhưng, như bạn đã nói, khi bạn phải chuyển các bối cảnh khác nhau cho từng bối cảnh, giống như tất cả các hàng khác nhau mà bạn nhấp vào để mở trang chi tiết của hàng đó, điều đó là không thể tránh khỏi.
Sử dụng Function.prototype.bind(). Trích dẫn MDN:
Các
bind()phương pháp tạo ra một chức năng mới, khi được gọi, có nóthistập hợp từ khoá với giá trị cung cấp, với một chuỗi nhất định đối số trước bất kỳ cung cấp khi các chức năng mới được gọi.
Nó được hỗ trợ bởi tất cả các trình duyệt chính, bao gồm IE9 +.
Mã của bạn sẽ trông như thế này:
$(edit_link).click(changeViewMode.bind(null, myvar));
Lưu ý bên lề: Tôi giả sử bạn đang ở trong bối cảnh toàn cầu, tức là thisbiến là window; mặt khác sử dụng thisthay vì null.
$.ajax(url).done(handler.bind(this, var1, var2));
Vâng, như thế này:
$(edit_link).click(function() { changeViewMode(myvar) });
Hoặc nếu bạn đang sử dụng es6, bạn sẽ có thể sử dụng chức năng mũi tên
$(edit_link).click(() => changeViewMode(myvar));
Bạn có thể làm được việc này
var message = 'Hello World';
var callback = function(){
alert(this)
}.bind(message);
và sau đó
function activate(callback){
callback && callback();
}
activate(callback);
Hoặc nếu cuộc gọi lại của bạn chứa logic linh hoạt hơn, bạn có thể truyền đối tượng.
Đây là một ví dụ theo cách tiếp cận của Ferdinand Beyer:
function function1()
{
function2(function () { function3("parameter value"); });
}
function function2(functionToBindOnClick)
{
$(".myButton").click(functionToBindOnClick);
}
function function3(message) { alert(message); }
Trong ví dụ này, "giá trị tham số" được truyền từ function1 đến function3 qua function2 bằng cách sử dụng hàm bọc.