这背后的逻辑是什么:
object = object = function
我在jQuery中看到了很多,例如,1.4.4第99行:
jQuery.fn = jQuery.prototype = {
init: function( selector, context ) {
或第332行:
jQuery.extend = jQuery.fn.extend = function() {
为什么要使用这种语法?
答案 0 :(得分:4)
它将两个对象设置为同一个东西:在评估语句之后,jQuery.fn和jQuery.prototype
指向同一个对象({init: function() {...}}
)
因此,jQuery.prototype.init和jQuery.fn.init都指向同一个函数(因为它们都只是对同一个对象的引用)
jQuery使用它的原因仅仅是语法糖。将jQuery.prototype设置为对象可确保新jQuery的所有实例都从其原型共享init方法。 jQuery,希望用户友好,为你创建一个别名,为jQuery实例添加新方法,别名是jQuery.fn,也称为$ .fn
答案 1 :(得分:3)
=
赋值运算符从右到左工作。
首先,它将最右边的值分配给最右边=
左侧的变量或属性。
然后它继续向左并将相同的值分配给下一个=
左侧的变量或属性(再次,从右到左)。
来自MDC docs for assignment operator:
基本赋值运算符是等于(=),它将右操作数的值赋给其左操作数。也就是说,x = y将y的值赋给x。
举个例子:
var obj = { some:'object' }; // obj is referencing an object
var a,b; // declare a couple of variables
a = b = obj; // now all three are referencing the object referenced by "obj"
所以它是这样的:
obj
被分配了对{ some:'object' }
b
被分配了obj
的值,这是对{ some:'object' }
的引用
a
被分配了b
的值,现在是{ some:'object' }
的引用
答案 2 :(得分:2)
它同时将功能分配给jQuery.fn
和jQuery.prototype
(第一个示例)。
答案 3 :(得分:1)
这是
的快捷方式object1 = something;
object2 = object1;
答案 4 :(得分:1)
以上答案全部命中,它为两个对象分配相同的值。之所以可能不那么清楚。第二个实例更容易解释。 jQuery.fn的每个成员都附加到$()的返回值。所以如果你做了以下......
jQuery.fn.myFunc = function() { return 'blah'; }
你会得到
$('#blah').myFunc(); // returns 'blah'
Extend是一个辅助函数,它将提供的对象成员添加到当前对象。 jQuery使用这些方法来构建其静态(jQuery.getJSON
)和“动态”($('.class').load()
)方法。这在开发期间提供了代码分离的一个很好的优势。例如,ajax.js使用jQuery.fn.extend添加其load,serialize,getScript等方法,并使用jQuery.extend添加jQuery.ajax等方法