jQuery.fn 是什么意思?

IT技术 javascript jquery
2021-02-07 05:55:53

什么是fn这里是什么意思?

jQuery.fn.jquery
5个回答

在 jQuery 中,fn属性只是属性的别名prototype

jQuery标识符(或$)仅仅是一个构造函数,并用它创建的所有实例,从构造函数的原型继承。

一个简单的构造函数:

function Test() {
  this.a = 'a';
}
Test.prototype.b = 'b';

var test = new Test(); 
test.a; // "a", own property
test.b; // "b", inherited property

一个类似于 jQuery 架构的简单结构:

(function() {
  var foo = function(arg) { // core constructor
    // ensure to use the `new` operator
    if (!(this instanceof foo))
      return new foo(arg);
    // store an argument for this example
    this.myArg = arg;
    //..
  };

  // create `fn` alias to `prototype` property
  foo.fn = foo.prototype = {
    init: function () {/*...*/}
    //...
  };

  // expose the library
  window.foo = foo;
})();

// Extension:

foo.fn.myPlugin = function () {
  alert(this.myArg);
  return this; // return `this` for chainability
};

foo("bar").myPlugin(); // alerts "bar"
@Shawn 我认为它会被称为属性,而不是参数,对吗?此处的参数将是“a”变量function func1 (a) { ... },而此处的属性将是“a”变量var foo = {}; foo.a = 'a'
2021-03-18 05:55:53
哦,我错过了一些东西.. 'window.foo = foo' 给了 'foo' 一个全局范围?从不新鲜,我会将其添加到我要学习的技术列表中。
2021-03-20 05:55:53
@EE33 如果我没记错的话,javascript 中的全局范围仅表示您的变量是 window 对象的参数。
2021-03-21 05:55:53
@Imray -return this允许链接,所以你可以这样做foo("bar").myPlugin().otherPlugin()
2021-03-26 05:55:53
这能保证是真的吗?我可以假设对 jQuery.prototype 的调用与 jQuery.fn 完全相同吗?我担心的是,如果 jQuery 在你调用 .fn 时做了一些魔法,那么它们是不可互换的
2021-04-03 05:55:53

fn字面意思是指 jquery prototype

这行代码在源代码中:

jQuery.fn = jQuery.prototype = {
 //list of functions available to the jQuery api
}

但是背后真正的工具fn是它可以将您自己的功能挂钩到 jQuery 中。请记住,jquery 将是您的函数的父作用域,因此this将引用 jquery 对象。

$.fn.myExtension = function(){
 var currentjQueryObject = this;
 //work with currentObject
 return this;//you can include this if you would like to support chaining
};

所以这是一个简单的例子。假设我想制作两个扩展,一个放置蓝色边框,将文本着色为蓝色,我希望它们链接起来。

jsFiddle Demo

$.fn.blueBorder = function(){
 this.each(function(){
  $(this).css("border","solid blue 2px");
 });
 return this;
};
$.fn.blueText = function(){
 this.each(function(){
  $(this).css("color","blue");
 });
 return this;
};

现在你可以对这样的类使用它们:

$('.blue').blueBorder().blueText();

(我知道这最好用 css 来完成,例如应用不同的类名,但请记住这只是一个演示来展示概念)

这个答案有一个完整的扩展的好例子。

您不能跳过each示例代码中的 吗?$.fn.blueBorder = function(){ this.css("border","solid blue 2px"); return this; };会正常工作,因为.css()alerady 迭代元素。
2021-03-14 05:55:53
这是最好的评论——知道 fn 只是一个别名并不像知道为什么有人应该关心那么有用,这个答案很好地证明了这一点。
2021-03-17 05:55:53
@SoonDead 很好的评论,但我真的很喜欢 Travis J 如何解释这个想法/原则。:)
2021-03-22 05:55:53
@SoonDead - 你当然可以,因为如果 jQuery 对象包含一个集合,那么该css函数将在内部自动迭代它们。这只是一个示例,展示了this外部对象是 jquery 对象而内部对象引用元素本身的差异
2021-04-04 05:55:53
在浏览了其他答案之后,我发现这个答案更容易理解主要概念。谢谢你。:)
2021-04-07 05:55:53

jQuery.fn是 的简写jQuery.prototype源代码

jQuery.fn = jQuery.prototype = {
    // ...
}

这意味着jQuery.fn.jquery是 的别名jQuery.prototype.jquery,它返回当前的 jQuery 版本。再次从源代码

// The current version of jQuery being used
jquery: "@VERSION",
我敢打赌还有其他目的..将函数附加到 $.fn,将使静态函数
2021-03-21 05:55:53
我喜欢这个答案。我确切地展示了如何在源代码中找到定义,然后如何以有用的方式解释定义。好的“授人以渔”的答题方法。+1。
2021-03-23 05:55:53
但这样做的目的是什么?只是节省几个击键?
2021-03-23 05:55:53
@slier:是的,差不多。
2021-03-28 05:55:53

$ .fn是一个别名jQuery.prototype,让您的jQuery用自己的功能扩展。

例如:

 $.fn.something = function{}

将允许您使用

$("#element").something()

$ .fn也与代名词jQuery.fn。

这就是我要找的!非常感谢 :)
2021-03-21 05:55:53
有可能返回一个值吗?如何?
2021-04-09 05:55:53

在我们有jQuery的源代码jQuery.fn = jQuery.prototype = {...},因为jQuery.prototype是一个对象的值jQuery.fn将简单地向同一对象的引用jQuery.prototype已经引用。

为了确认这一点,您可以检查它jQuery.fn === jQuery.prototype是否评估true(它确实)然后它们引用相同的对象