你能为我解释一下这种来自Jquery的JavaScript语法吗?

您所在的位置:网站首页 java中字面量是什么意思啊 你能为我解释一下这种来自Jquery的JavaScript语法吗?

你能为我解释一下这种来自Jquery的JavaScript语法吗?

2023-03-27 21:02| 来源: 网络整理| 查看: 265

这个问题有几个层次。首先是对象文字。 Javascript允许你使用对象字面值语法来声明对象(你可能听说过JSON,这只是存储/传输到字符串中的语法)。语法如下:

var obj = { key1 : "value1", key2 : "value2" };

一个写这更有条理/可读的方式是:

var obj = { key1 : "value1", key2 : "value2" };

上面的代码是完全一样做:

var obj = new Object(); obj.key1 = "value1"; obj.key2 = "value2";

那么什么你看到了:

addClass : function() {

仅仅是对象字面声明的一部分。本质上,代码是这样做的:

var tmp = new Object(); // ... tmp.addClass = function() { /* ... */ }; // ... jQuery.fn.extend(tmp).

除了它声明的对象直接调用extend()字面因此没有必要使用一个临时变量。

第二件事是在JavaScript中的功能并不特别。我的意思是,功能被视为一切:字符串,数字,数组&对象。事实上,在JavaScript中,字符串,数字,数组和函数都是对象。所以你可以给一个变量分配一个函数:

var n = function() {alert("Hello World");}

所以没有什么神奇的发生。它只是以对象字面量语法创建一个匿名对象,其中包含作为参数传递给extend方法的函数集合。

这是对语法的解释。也就是说,JavaScript本身发生了什么。

我们知道我们正在寻找jQuery代码。这给了我们更多的线索。首先:jQuery.fn只是一个指向jQuery.prototype的指针。而jQuery本身就是一个构造函数。在JavaScript构造函数是可以用来创建对象的常规函数​​。当您使用构造函数创建对象时,该对象将继承构造函数的原型。

而jQuery修改了它的原型并添加了一个extend方法,允许您将其他方法和属性添加到jQuery的原型中。这是它在做什么。前面提到的对象字面值中包含的所有函数都将由extend方法处理,以便将其添加到jQuery本身,以便在创建新的jQuery对象时,它们将继承它们。

根据您的评论,它看起来像有很多JavaScript的东西你需要学习。我可以建议通过Rhino书籍阅读:"JavaScript: The Definitive Guide"。而且一旦你知道更多,并更舒适的JavaScript我也建议阅读"Javascript: The Good Parts"。

我会尝试回答最好的我可以在这里关于您的评论。解释一切需要一整本书。

首先,关于行:

jQuery.extend = jQuery.fn.extend = function() {

如前所述,jQuery.fn仅仅是一个指针,指向jQuery.prototype。所以它在做什么基本上是这样的:

jQuery.prototype.extend = function() { /* ... */ }; jQuery.extend = jQuery.prototype.extend;

这两者有什么区别?你需要记住的第一件事是jQuery是一个构造函数。一个由构造函数创建的对象继承它的原型(JavaScript没有类,但用“class”切换“prototype”这个词,并开始理解对象是如何工作的)。因此,延长的第一个声明它定义为jQuery对象的所有实例的方法:

// note: The following is not the recommended way to write jQuery code // but it does illustrate the point about inheritance: var foo = new jQuery(); foo.extend(); // this works because foo inherits jQuery's extend method

记不记得我说,在JavaScript函数也是对象?第二个声明将jQuery函数作为对象并直接向其添加函数。这主要是语法糖。它是如此,你可以写:

jQuery.extend();

,而不是长:

jQuery.prototype.extend();

或令人费解的东西,如:

new jQuery().extend.call(jQuery);

取决于如何延长写。

因此,jQuery.extend()只是jQuery构造函数本身的一种方法。它不会被jQuery构造函数创建的对象继承。把它看作一个类的方法。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3