为什么datepicker()接受参数'getDate'?

时间:2013-04-02 17:00:47

标签: javascript jquery jquery-ui object datepicker

var year= $("input[name=dateAccessed]").datepicker('getDate').getFullYear()

上面的代码得到了datepicker中设置的日期,然后只获得了从date开始的年份,然后将其保存在名为year的变量中。

我知道这段代码将名为dateAccessed的输入字段转换为jQuery对象。由于它现在是一个jQuery对象,因此可以将jQuery方法应用于它。

然后我应用datepicker,是datepicker的方法还是对象?我不明白,因为它接受两个参数(使它成为一个方法)和属性(一个对象具有属性)。有对象+方法之类的东西吗?

为什么datepicker接受参数('getDate')来返回所选日期?这是如何运作的?

如果datepicker改为使用.getDate方法,那会不会更好?所以我们可以把它写成datepicker().getDate.getFullYear()

2 个答案:

答案 0 :(得分:10)

的DatePicker

datepicker是一个功能。使用括号('getDate')调用该函数,并且由于此参数的值为'getDate',它将返回Javascript Date对象,该对象是本机Javascript并具有getFullYear函数。

有关datepicker的更多信息,请参阅jQuery UI Datepicker小部件页面的the getDate section

getDate()

Returns: Date
Returns the current date for the datepicker or null if no date has been selected.

    This method does not accept any arguments.

Code examples:

Invoke the getDate method:

var currentDate = $( ".selector" ).datepicker( "getDate" );

Javascript概念

在Javascript中帮助您的一个关键概念是理解函数调用和函数引用之间的区别。请参阅更详细的another of my javascript answers。一旦你理解了这一点,你就会明白为什么“datepicker是一个方法或一个对象”必须通过“它是一个函数对象”来回答。

在Javascript中,函数只是特殊对象,可以通过在其名称后添加一对括号来调用。这样做然后返回的不是函数对象本身,而是函数对象返回,其中的语句为return somethingHere;。它可以帮助您阅读有关prototypal inheritance的更多信息。

jQuery Concepts

jQuery利用了Javascript的链接能力。这是您调用函数的位置,该函数返回一个对象,您可以在该对象上一次又一次地调用另一个函数。另一种使用模式是为链的每个步骤声明变量并采取单步骤,但这会变得混乱,一般而言我们都更愿意避免在不必要的地方声明变量。如果我们要转换你的代码所以没有链接它可能看起来像这样:

var dateAccessedInput, selectedDate, year;
dateAccessedInput = $("input[name=dateAccessed]");
selectedDate = dateAccessedInput.datepicker('getDate');
year = selectedDate.getFullYear();

在jQuery中,通常的做法是在可能的情况下使用jQuery函数返回相同的jQuery对象,以便您可以将其他方法链接起来。当链接变长时,你甚至可以将它们放在不同的行上,以防止它变成一个大块。这是我的一个项目中的一些真正的javascript jQuery代码:

incident
   .wireUp($('div.incidents div.incident'))
   .find('input:data(focus)')
   .first()
   .focus()
   .filter(':data(select)')
   .trigger('select');

我希望这可以更清楚地说明为什么不同的功能可以链接在一起。

另外,对于它的价值,Javascript有函数,虽然是,但它们是方法,我们通常不会这样称呼它们。

答案 1 :(得分:2)

关于链接和表达的一点

您似乎对chaining方法感到困惑,尤其是返回对象的方法。由于每个方法都返回一个值,因此引用该值的是expression,无论是对象还是字符串。

下面的示例避免了方法的链接,并将您自己的示例分解为分配给变量的表达式。

代码的未链接版本

$是一个获取参数"input[name=dateAccessed]"并返回jQuery对象的函数。您可以像在示例中一样直接引用结果对象,或将其分配给变量。

例如:

var jquery_field_object = $("input[name=dateAccessed]");

同样,datepicker是获取参数jQuery并返回'getDate'对象的Date对象的方法。您可以再次直接引用结果对象或将其分配给变量。

例如:

var date_object = jquery_field_object.datepicker('getDate');

以类似的方式,getFullYear()Date对象的方法。因此,完整的未链接示例将为:

var jquery_field_object = $("input[name=dateAccessed]");
var date_object         = jquery_field_object.datepicker('getDate');
var year                = date_object.getFullYear();