Hướng dẫn how to check if a function has been called in javascript - cách kiểm tra xem một hàm đã được gọi trong javascript chưa

Tôi đang tìm kiếm một kỹ thuật tốt để thoát khỏi những gì tôi muốn làm: để thiết lập một biến toàn cầu.

Lần đầu tiên ai đó chạy chức năng bằng cách nhấp vào nút, nó kích hoạt chức năng ban đầu để biến một vài thứ thành Draggables. Sau đó, nếu họ nhấp vào nút lần thứ hai, tôi muốn xác định xem chức năng init có được khởi tạo hay không và nếu không để không gọi nó nữa. Tôi có thể dễ dàng thực hiện điều này bằng cách đặt một biến toàn cầu từ hàm init và sau đó kiểm tra biến đó từ chức năng nhấp chuột, nhưng tôi tự hỏi làm thế nào để thực hiện việc này mà không cần đặt biến toàn cầu. Tôi thực sự muốn một ví dụ về một cách để làm điều này.

Hướng dẫn how to check if a function has been called in javascript - cách kiểm tra xem một hàm đã được gọi trong javascript chưa

hỏi ngày 2 tháng 7 năm 2012 lúc 19:27Jul 2, 2012 at 19:27

Hướng dẫn how to check if a function has been called in javascript - cách kiểm tra xem một hàm đã được gọi trong javascript chưa

Bạn có thể thêm một thuộc tính vào chức năng:

function init() {
    init.called = true;
}

init();

if(init.called) {
    //stuff
}

Đã trả lời ngày 2 tháng 7 năm 2012 lúc 19:29Jul 2, 2012 at 19:29

Levi Hackwithlevi HackwithLevi Hackwith

9.17217 Huy hiệu vàng63 Huy hiệu bạc114 Huy hiệu đồng17 gold badges63 silver badges114 bronze badges

Trong khi câu trả lời của @Levi nên hoạt động tốt, tôi muốn trình bày một lựa chọn khác. Bạn sẽ viết quá mức chức năng init để không làm gì một khi nó đã được gọi.

var init = function () {
   // do the initializing

    init = function() {
        return false;
    }
};

Hàm khi được gọi là lần đầu tiên sẽ thực hiện init. Sau đó, nó sẽ ngay lập tức ghi đè lên chính nó để trả lại sai vào lần tới khi nó được gọi. Lần thứ hai hàm được gọi, cơ thể hàm sẽ chỉ chứa Return False.

Để đọc thêm: http://www.ericfeminella.com/blog/2011/11/19/function-overwriting-in-javascript/

Benmorel

32,8K48 Huy hiệu vàng170 Huy hiệu bạc303 Huy hiệu đồng48 gold badges170 silver badges303 bronze badges

Đã trả lời ngày 2 tháng 7 năm 2012 lúc 19:37Jul 2, 2012 at 19:37

Amith Georgeamith GeorgeAmith George

5.7882 Huy hiệu vàng33 Huy hiệu bạc52 Huy hiệu Đồng2 gold badges33 silver badges52 bronze badges

1

Tại sao bạn không kiểm tra xem các chất kéo của bạn có lớp draggable trên chúng không?

if ($('.mydiv').is('.draggable')) {
     //do something
}

Đã trả lời ngày 2 tháng 7 năm 2012 lúc 19:31Jul 2, 2012 at 19:31

JasonjasonJason

50,5K37 Huy hiệu vàng128 Huy hiệu bạc185 Huy hiệu đồng37 gold badges128 silver badges185 bronze badges

4

Function.prototype.fired = false;

function myfunc() { 
    myfunc.fired = true; 
    // your stuff
};

console.log(myfunc.fired) // false

myfunc();

console.log(myfunc.fired) // true

Đã trả lời ngày 4 tháng 4 năm 2014 lúc 2:19Apr 4, 2014 at 2:19

Những gì bạn có thể làm là tháo chức năng init từ nguyên mẫu.

​var Obj = function () {
    this.init = function () {
        document.write("init called
"); this.init = null; } } var o = new Obj(); if (o.init) document.write("exists!
"); o.init(); if (o.init) document.write("exists!
"); o.init();

var init = function () {
   // do the initializing

    init = function() {
        return false;
    }
};
0 đầu tiên sẽ đúng và in
var init = function () {
   // do the initializing

    init = function() {
        return false;
    }
};
1 nhưng vì chức năng tự xóa, ____10 thứ hai sẽ thất bại. Trong ví dụ của tôi, tôi gọi lần thứ hai là Init điều kiện chỉ để cho thấy rằng sẽ không có gì xảy ra, nhưng tất nhiên bạn chỉ có thể gọi nó nếu nó tồn tại:

if (o.init) o.init();

http://jsfiddle.net/coreyog/Wd3Q2/

Đã trả lời ngày 2 tháng 7 năm 2012 lúc 19:55Jul 2, 2012 at 19:55

Corey OgburnCorey OgburnCorey Ogburn

23.3K30 Huy hiệu vàng111 Huy hiệu bạc183 Huy hiệu đồng30 gold badges111 silver badges183 bronze badges

2

Cách tiếp cận chính xác là sử dụng API proxy JavaScript để bẫy các cuộc gọi chức năng bằng trình xử lý

var init = function () {
   // do the initializing

    init = function() {
        return false;
    }
};
3.

const initFun = (args) => {
  console.log('args', args);
}
const init = new Proxy(initFun, {
  apply(target, thisArg, args){
    target.calls = target.calls ? target.calls + 1 : 1;
    return target.apply(thisArg, args);
  }
});

init('hi');
console.log(init.calls); // 1
init('hello');
console.log(init.calls); // 2

Đã trả lời ngày 10 tháng 6 năm 2020 lúc 5:32Jun 10, 2020 at 5:32

Hướng dẫn how to check if a function has been called in javascript - cách kiểm tra xem một hàm đã được gọi trong javascript chưa

Ahmadalibalochahmadalibalochahmadalibaloch

5.6612 Huy hiệu vàng46 Huy hiệu bạc56 Huy hiệu Đồng2 gold badges46 silver badges56 bronze badges

Làm thế nào để bạn kiểm tra xem chức năng JavaScript được gọi?

Cách phát hiện một hàm được gọi với JavaScript..
Nếu hàm được gọi (trong phần có chức năng này), thì không gọi hàm ..
Nếu hàm không được gọi (trong phần không có chức năng này), thì hãy gọi hàm ..

Điều gì xảy ra khi một hàm được gọi trong JavaScript?

Gọi chức năng Hàm thực thi các câu lệnh của nó và trả về giá trị 25. Phạm vi của một hàm là hàm trong đó nó được khai báo (hoặc toàn bộ chương trình, nếu nó được khai báo ở cấp cao nhất). Lưu ý: Điều này chỉ hoạt động khi xác định hàm bằng cú pháp trên (nghĩa là, hàm funcName () {}).The function executes its statements and returns the value 25 . The scope of a function is the function in which it is declared (or the entire program, if it is declared at the top level). Note: This works only when defining the function using the above syntax (i.e., function funcName(){} ).

$ () Trong javascript là gì?

Hàm $ () hàm đô la, $ (), có thể được sử dụng làm tốc ký cho hàm getEuityByID.Để chỉ một phần tử trong mô hình đối tượng tài liệu (DOM) của trang HTML, hàm thông thường xác định một phần tử là: tài liệu.getEuityById ("id_of_element").Phong cách.shorthand for the getElementById function. To refer to an element in the Document Object Model (DOM) of an HTML page, the usual function identifying an element is: document. getElementById("id_of_element"). style.

Làm thế nào để bạn tạo một chức năng sẽ kiểm tra xem nó được gọi bằng từ khóa mới hoặc hàm bình thường?

Thuộc tính mục tiêu có thể được sử dụng để phát hiện xem một hàm được gọi làm hàm tạo bằng toán tử "mới" hay chỉ được gọi là bình thường.Nếu hàm được gọi bằng toán tử "mới" thì mới.Mục tiêu đề cập đến hàm tạo hoặc chức năng.Đối với chức năng bình thường gọi mới.. If the function was called using the "new" operator then new. target refers to the constructor or function. For normal function calls new.