JavaScript对象语法

时间:2011-01-24 18:20:37

标签: javascript

这背后的逻辑是什么:

object = object = function

我在jQuery中看到了很多,例如,1.4.4第99行:

jQuery.fn = jQuery.prototype = {
init: function( selector, context ) {

或第332行:

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

为什么要使用这种语法?

5 个答案:

答案 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.fnjQuery.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等方法