Câu hỏi Sự khác nhau giữa jQuery.extend và jQuery.fn.extend?


Tôi đang cố gắng hiểu cú pháp plugin jquery, bởi vì tôi muốn kết hợp hai plugin vào một. Blinker cũng cần để có thể dừng lại khoảng thời gian hoặc chạy một số lần.

Dù sao, cú pháp này giống như

jQuery.fn.extend({
    everyTime: function(interval, label, fn, times) {
        return this.each(function() {
            jQuery.timer.add(this, interval, label, fn, times);
        });
    },
    oneTime: function(interval, label, fn) {
        return this.each(function() {
            jQuery.timer.add(this, interval, label, fn, 1);
        });
    },

điều này

$.fn.blink = function(options)
    {

bởi vì nó trông giống như lần đầu tiên (không =) là một cách để đặt nhiều phương thức cùng một lúc. Thê nay đung không? Ngoài ra khi tôi ở đây Điều gì sẽ là lý do để thêm các phần tử và một số logic vào đối tượng jquery?

jQuery.extend({
    timer: {
        global: [],
        guid: 1,
        dataKey: "jQuery.timer",

(đây là từ plugin hẹn giờ)

cảm ơn, Richard


76
2018-01-02 09:48


gốc




Các câu trả lời:


jQuery.extend được sử dụng để mở rộng bất kỳ đối tượng nào có các hàm bổ sung, nhưng jQuery.fn.extend được sử dụng để mở rộng đối tượng jQuery.fn, trong thực tế, thêm một số hàm plugin trong một lần (thay vì gán từng hàm riêng biệt).

jQuery.extend:

var obj = { x: function() {} }

jQuery.extend(obj, { y: function() {} });

// now obj is an object with functions x and y

jQuery.fn.extend:

jQuery.fn.extend( {
        x: function() {},
        y: function() {}
});

// creates 2 plugin functions (x and y)

84
2018-01-02 09:53



cảm ơn, thats rõ ràng về việc gán nhiều đối tượng, nhưng tôi vẫn không chắc chắn khi nào nên sử dụng jquery.extend. Tại sao bạn sẽ vượt qua một cái gì đó mà bạn làm trong fn.extend đến jquery.extend? Tôi cũng có thể đăng một câu hỏi mới cho điều này, bởi vì tôi đã hỏi hai câu hỏi. - Richard
jQuery.extend () thực sự là một hàm tiện lợi có thể được sử dụng trong mã javascript của riêng bạn để mở rộng các đối tượng theo cách tổng quát. Nó là một phần của các hàm "tiện ích" trong jQuery (không được sử dụng cho thao tác DOM) - Philippe Leybaert


jQuery.extend({
    abc: function(){
        alert('abc');
    }
});

sử dụng: $.abc(). (Không có bộ chọn nào được yêu cầu như $.ajax().)

jQuery.fn.extend({
    xyz: function(){
        alert('xyz');
    }
});

sử dụng: $('.selector').xyz(). (Bộ chọn được yêu cầu như $('#button').click().)

Chủ yếu nó được sử dụng để thực hiện $.fn.each().

Tôi hy vọng nó sẽ giúp.


64
2017-12-21 14:54





Sự khác nhau giữa jQuery.extend và jQuery.fn.extend?

Trên thực tế, không có gì ngoài việc tham khảo cơ sở của họ. bên trong Nguồn jQuery, bạn có thể đọc:

jQuery.extend = jQuery.fn.extend = function() { … };

Vì vậy, làm thế nào nó hoạt động? Các tài liệu lần đọc:

Hợp nhất nội dung của hai hoặc nhiều đối tượng lại với nhau thành đối tượng đầu tiên.

Nó chỉ là một for-in-loop sao chép các thuộc tính, pimped với một lá cờ để recurse các đối tượng lồng nhau. Và một tính năng khác:

Nếu chỉ có một đối số được cung cấp cho $.extend(), điều này có nghĩa là đối số mục tiêu đã bị bỏ qua

 // then the following will happen:
 target = this;

Vì vậy, nếu hàm được gọi jQuery chính nó (không có mục tiêu rõ ràng), nó sẽ mở rộng vùng tên jQuery. Và nếu hàm được gọi jQuery.fn (không có mục tiêu rõ ràng), nó sẽ mở rộng đối tượng nguyên mẫu jQuery nơi tất cả các phương thức (plugin) được đặt.


18
2018-02-11 20:04



Upvote của tôi !!!! này. tôi đã xem mã nguồn để xem cách jQuery mở rộng chính nó - dekdev


Bài đăng trên blog này có mô tả hay:

$.fn.extend({
myMethod: function(){...}
});
//jQuery("div").myMethod();

$.extend({
myMethod2: function(){...}
});
//jQuery.myMethod2();

Trích dẫn:

Theo nguyên tắc chung, bạn nên mở rộng đối tượng jQuery cho các hàm và đối tượng jQuery.fn cho các phương thức. Một hàm, trái ngược với một phương thức, không được truy cập trực tiếp từ DOM.


13
2018-03-13 12:10



Truy cập phương pháp có nghĩa là gì 'trực tiếp từ DOM'? - Dan Nissenbaum
directly from the DOM đề cập đến khái niệm JavaScript rất cơ bản về hàm gọi so với thuộc tính đối tượng / gọi nguyên mẫu (trên trình bao bọc jQuery xung quanh các đối tượng DOM nguyên gốc). Xem ví dụ và cố gắng tìm sự khác biệt và suy nghĩ về lý do tại sao mã trong các ví dụ không thể hoán đổi cho nhau. - gavenkoa


$.fn.something= function{};

trỏ đến jQuery.prototype và cho phép truy cập các phần tử dom thông qua "this". Bây giờ bạn có thể sử dụng $(selector).something(); Vì vậy, chức năng này hoạt động như plugin $(selector).css();

$.something = function{};

thêm một thuộc tính hoặc hàm vào đối tượng jQuery và u không thể sử dụng "this" để truy cập dom Bây giờ bạn có thể sử dụng nó như $.something(); điều này hoạt động như một chức năng tiện ích như $.trim()

nhưng

$.fn.extend({function1(), function2()}) and  $.extend({function1(), function2()}) 

cho phép thêm nhiều hơn 1 hàm cùng một lúc. Ngoài ra, chúng có thể được sử dụng để hợp nhất hai đối tượng literals trong trường hợp chúng tôi cung cấp nhiều hơn một đối tượng.


7
2018-03-07 23:12