01/10/2018, 16:55

'fn.init' trong javascript là gì?

E định làm một framework cho riêng mình giống như jquery, đồng thời cũng là một newbie của javascript, mà chưa hiểu những thứ gọi là fn.init là cái gì, các pro có thể giúp em giải đáp được không ạ, e cảm ơn nhiều

(function(){
  "use strict";
  var $ = function(selector,context){
      return new $.fn.init(selector,context)
    }
  }
})(window)
viết 19:01 ngày 01/10/2018

trong phần viết plugin cho jquery nó có giải thích mà https://learn.jquery.com/plugins/basic-plugin-creation/

Hung viết 18:58 ngày 01/10/2018

$ là cách thay thế, viết gọn hơn cho jQuery, nên $()jQuery() là như nhau.

$.fn là 1 object chứa tất cả function liên quan đến jQuery.

Tuy nhiên init không phải là property của $.fn, Để hiểu hơn khi truy xuất 1 property của 1 object, JS engine sẽ gọi đến built-in [[GET]] với các tham số và object và tên property cần truy xuất, $.fn.init tương đương cách gọi [[GET]]($.fn, 'init').

Phần hiện thực của [[GET]]($.fn, 'init') kiểm tra như sau:

  • init có phải là 1 property của $.fn không, kết quả không có init (như mình nói ở trên).
  • Lên 1 bậc prototype chain, kiểm tra init có phải là property của $.fn.__proto__ hay không? $.fn.__proto__jQuery.prototype cùng trỏ tới 1 object chung. Trong jQuery.prototype có property tên là init. Kết quả trả về giá trị của property init là function object (callable object).

Lời gọi hàm $() sẽ gọi tới $.fn.init().

Do đó, các functions như $(), $.fn.init(), jQuery(), jQuery.prototype.init() đều thực hiện như nhau.

Bài liên quan
0