JavaScript对象语法

JavaScript对象语法,javascript,Javascript,这背后的逻辑是什么: 对象=对象=函数 我在jQuery中经常看到它,例如,1.4.4第99行: jQuery.fn = jQuery.prototype = { init: function( selector, context ) { 或第332行: jQuery.extend = jQuery.fn.extend = function() { 为什么要使用此语法?这是 object1 = something; object2 = object1; 它同时将函数分配给jQuery.fn

这背后的逻辑是什么:

对象=对象=函数

我在jQuery中经常看到它,例如,1.4.4第99行:

jQuery.fn = jQuery.prototype = {
init: function( selector, context ) {
或第332行:

jQuery.extend = jQuery.fn.extend = function() {
为什么要使用此语法?

这是

object1 = something;
object2 = object1;

它同时将函数分配给
jQuery.fn
jQuery.prototype
(第一个示例)

它将两个对象设置为同一个对象:对语句求值后,jQuery.fn和jQuery.prototype 指向同一个对象(
{init:function(){…}}

因此,jQuery.prototype.init和jQuery.fn.init都指向同一个函数(因为它们都只是对同一对象的引用)


jQuery使用它的原因只是为了语法上的糖分。将jQuery.prototype设置为对象可确保新jQuery的所有实例都共享其原型中的init方法。为了方便用户,jQuery为您创建了一个别名,用于向jQuery实例添加新方法,该别名是jQuery.fn,也称为$.fn

赋值运算符从右到左工作

因此,它首先将最右边的值分配给最右边的
=
左边的变量或属性

然后它继续向左,并将相同的值分配给下一个
=
左侧的变量或属性(再次从右向左)

从:

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


以上答案都很正确,这就是为两个对象分配相同的值。原因可能不太清楚。第二种情况更容易解释。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等方法,因此上面的示例与键入jQuery.prototype.fn={}相同;不,它与:
var obj={…};jQuery.fn=obj;jQuery.prototype=obj;删除window.obj
;好的,请容忍我。这就像说,一个对象有一个名为init的函数,jQuery.prototype现在有一个名为init的函数,jQuery.fn也有一个名为init的函数?是的,记住它们都指向同一个东西:jQuery.prototype/jQuery.fn。如果您了解C指针,您可以将其视为指向同一结构的指针。