JavaScript对象语法
这背后的逻辑是什么: 对象=对象=函数 我在jQuery中经常看到它,例如,1.4.4第99行: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.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.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指针,您可以将其视为指向同一结构的指针。