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

上面的代码获取的是日期选择器中设置的日期,然后只获取日期的年份,然后将其保存在名为 year 的变量中。

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

然后我应用日期选择器,日期选择器是方法还是对象?我不明白,因为它同时接受参数(使其成为方法)和属性(对象具有属性)。有没有对象+方法之类的东西?

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

如果 datepicker 有一个.getDate方法不是更好吗?所以我们可以把它写成datepicker().getDate.getFullYear().

4

2 回答 2

10

日期选择器

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

有关. _ _datepicker

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 有帮助的一个关键概念是理解函数调用和函数引用之间的区别。请参阅我的另一个更详细的 javascript 答案。一旦你理解了这一点,你就会明白为什么“日期选择器是一个方法还是一个对象”必须用“它是一个函数对象”来回答。

在 Javascript 中,函数只是特殊的对象,可以通过在其名称后添加一对括号来调用。这样做不会返回函数对象本身,而是返回函数对象返回的任何内容,其中包含return somethingHere;. 它可以帮助您阅读更多关于原型继承的信息。

jQuery 概念

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 具有函数,虽然是的,它们是方法,但我们通常不这样称呼它们。

于 2013-04-02T17:06:36.790 回答
2

一点关于链接和表达式

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

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

您的代码的非链接版本

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

例如:

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

同样,datepickerjQuery获取参数'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();
于 2013-04-02T17:11:19.930 回答