JavaScript对象语法

4
这是什么逻辑:
object = object = function
我在 jQuery 中经常看到这个,例如 1.4.4 行 99:
jQuery.fn = jQuery.prototype = {
init: function( selector, context ) {

或第332行:

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

为什么要使用这种语法?
5个回答

4
这段文字讲述了在jQuery中,将两个对象设置为相同的内容:在语句被评估后,jQuery.fn和jQuery.prototype都指向同一个对象({init: function() {...}})。
因此,jQuery.prototype.init和jQuery.fn.init都指向同一个函数(因为它们都只是对同一对象的引用)。
jQuery使用这种方式的原因仅仅是为了语法糖。将jQuery.prototype设置为一个对象可以确保所有新的jQuery实例都共享其原型中的init方法。为了方便用户,jQuery创建了一个别名,使您可以向jQuery实例添加新方法,该别名是jQuery.fn,也称为$.fn。

那么上述示例与键入以下内容相同:jQuery.prototype.fn = {}; - Sam
不,它与以下代码相同:var obj = {...}; jQuery.fn = obj; jQuery.prototype = obj; delete window.obj; - Ruan Mendes
好的,请听我说。这就像是说,一个对象有一个名为init的函数,而jQuery.prototype现在也有一个名为init的函数,jQuery.fn也是这样吗? - Sam
是的,请记住它们都指向同一个东西:jQuery.prototype/jQuery.fn。如果您了解C指针,可以将它们视为指向相同结构体的指针。 - Ruan Mendes

3
=赋值运算符是从右到左进行的。
因此,它首先将最右边的值分配给最右边=左侧的变量或属性。
然后,它继续向左,并将相同的值分配给紧接着下一个=左侧的变量或属性(再次从右到左)。
来自MDC 赋值运算符文档

基本赋值运算符是等于(=),将其右操作数的值分配给其左操作数。也就是说,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

这个例子同时将函数分配给jQuery.fnjQuery.prototype(第一个例子)。


1

这是一个快捷方式

object1 = something;
object2 = object1;

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这样的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接