你能为我解释一下这种来自Jquery的JavaScript语法吗? |
您所在的位置:网站首页 › java中字面量是什么意思啊 › 你能为我解释一下这种来自Jquery的JavaScript语法吗? |
这个问题有几个层次。首先是对象文字。 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 |