2011-09-22 169 views
0

我在看jquery.ui-1.8.11.js:jQuery - 这个语法是什么意思?

$.extend(Datepicker.prototype, { 
    /* Class name added to elements to indicate already configured with a date picker. */ 
    markerClassName: 'hasDatepicker', 

    /* Debug logging (if enabled). */ 
    log: function() { 
     if (this.debug) 
      console.log.apply('', arguments); 
    }, 

那是什么log: function()语法?它叫什么?它如何被使用?

+0

这只是提供给新的原型的选项被指定。最有可能用于处理新对象上的日志记录事件。 “如果需要记录某些内容,请在调试启用的情况下调用此函数” –

回答

4

$.extend调用的第二个参数是Object。他们使用大括号{}并采取key: value对定义。该值可以是一个函数,这就是log发生的情况。

这是类似于以下内容:

var myObject = { 
    prop1: 'some value', 
    prop2: 'some other value', 
    method1: function() { 
    // some code here. 
    } 
} 

你可以再打myObject.method1()执行任何函数内部的代码。

2

它正在扩展Datepicker.prototype对象的对象属性。

例如,在运行语句之后,你可以这样做:

alert(new Datepicker().markerClassName); // alert('hasDatepicker'); 

// OR 

new Datepicker().log(); // calls the function 

基本上,$.extend()允许你修改与附加属性的对象(或覆盖它们)。考虑以下对象:

var obj = { Text: 'Hello World' }; 

alert(obj.Text); // Hello World 

$.extend(obj, { 
    Text: 'Something Else', 
    func: function() { alert('Stuff'); } 
}); 

alert(obj.Text); // Something Else 
obj.func(); 
0

此语法使用JavaScript原型设计来扩展Datepicker对象并添加其他属性和函数。这将Datepicker.log添加为函数和Datepicker.markerClassName。

0

第二个参数(开始与开口大括号{并与右大括号}结束)到$.extend()呼叫是对象文字。一般来说,它是用new Object明确创建对象的简写。这大致相当于:

var foo = new Object; 
foo.bar = 'bar'; 

var foo = { 
    bar: 'bar' 
}; 

这也是值得注意的是,这样的功能分配,它们是被指定为值对象的属性匿名函数。如:

var foo = new Object; 
foo.method1 = function() { ... }; 

也可以使用命名函数:

function fn1() { ...} 
foo.method2 = fn1; 

或者:

foo.method3 = function fn2() { ... }; 

或者:

var foo = { 
    method4: function fn3() { ... } 
}; 

还有其他的文字有用JavaScript中的简写,例如Array点亮全部擦除:

var arr = ['members', 'are', 'separated', 'by', 'commas']; 

而正则表达式文字(注意,解析一个RegExp文本不具有相同的转义规则传递一个字符串new RegExp()):

var exp = /some pattern/g; // Modifiers are after the closing slash