var year= $("input[name=dateAccessed]").datepicker('getDate').getFullYear()
上面的代码得到了datepicker中设置的日期,然后只获得了从date开始的年份,然后将其保存在名为year的变量中。
我知道这段代码将名为dateAccessed的输入字段转换为jQuery对象。由于它现在是一个jQuery对象,因此可以将jQuery方法应用于它。
然后我应用datepicker,是datepicker的方法还是对象?我不明白,因为它接受两个参数(使它成为一个方法)和属性(一个对象具有属性)。有对象+方法之类的东西吗?
为什么datepicker接受参数('getDate')
来返回所选日期?这是如何运作的?
如果datepicker改为使用.getDate
方法,那会不会更好?所以我们可以把它写成datepicker().getDate.getFullYear()
。
答案 0 :(得分:10)
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中帮助您的一个关键概念是理解函数调用和函数引用之间的区别。请参阅更详细的another of my javascript answers。一旦你理解了这一点,你就会明白为什么“datepicker是一个方法或一个对象”必须通过“它是一个函数对象”来回答。
在Javascript中,函数只是特殊对象,可以通过在其名称后添加一对括号来调用。这样做然后返回的不是函数对象本身,而是函数对象返回,其中的语句为return somethingHere;
。它可以帮助您阅读有关prototypal inheritance的更多信息。
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();