ASP.NET程序员的JavaScript:学习函数
JavaScript不是一种对象指向型语言,因此我们要用该语言自身的特性来解决问题而不要期望它像以往我们所使用的语言那样。我们调整自己的认知态度后就会从中收益了。
举例来说,本人非常喜欢JavaScript处理可执行代码的方式,虽然JavaScript的独特性能能够被句法掩盖。我们可以用JavaScript定义一个包含代码的函数,如下所示:
function ReturnTrue()
{
return true;
};
对于有经验的程序员来说,这样的代码是十分眼熟的。不过,这一句法掩饰了JavaScript真正在做的事情。替代的句法更能清晰表达出JavaScript所做的事情:
var ReturnTrue = function()
{
return true;
};
正如这一句法所描述的,该代码中变量Return True被设置成了函数。随着引用的建立,我们现在可以通过变量调用这一函数。
var result;
result = ReturnTrue();
这里我们不是定义了一个名为Return True的函数,我们定义的是可以被变量Return True这一变量调用的函数。要调用该函数,我们必须在变量名的末端添加括号,这里,括号是调用行为的操作者。
从另一方面说,如果我们省略这一调用行为的操作主体,那么只会简单地将一个变量的值分配给另一个变量。这个举例会导致第二个变量,即Return True2会为函数保留一个引用:
var ReturnTrue2;
ReturnTrue2 = ReturnTrue
现在,Return True2 这一变量正引用函数,我们可以用第二个变量调用函数。
var result;
result = ReturnTrue2();
当然,这还有些不尽人意。向另一个变量分配一个函数与援引函数之间的差异其实很小。在遵守用户界面设计方面有一个很好的规则:小的差异只需要进行小的变更,而大的差异则要求大幅度的变更。
在本人看来,返回结果和分配引用之间的差异应该算是比较大的,这样的差异需要的不仅仅在于对括号的设定是否存在。我认为,要进行引用转移时,不同种类的赋值操作符才是更佳的选择。但是,现在才抱怨这些显得有些为时已晚。
向对象添加函数
我所喜欢的是利用这种能够向变量函数存储引用的功能为数据结构添加方法。这个举例通过设定结构中的某一要素将我的数据结构扩展成了一个函数,该函数会在未来返回日期。
var salesOrder =
{
id: "",
dateOrdered: new Date(),
cancelDate: function ()
{
var d = new Date();
d.setYear(d.getYear() + 1);
return d.toLocaleString();
}
};
和其他结构一样,我们可以立刻使用salesOrder。这个例子就调用了canceDate函数:
var dateForCancellation = salesOrder.cancelDate();
使用与c#程序员类似的术语可以让我们引用来自函数的相同结构中的其他要素。此结构可让我们以函数代码的某一部分的方式使用结构dateOrder要素:
var salesOrder =
{
id: "",
dateOrdered: new Date(),
cancelDate: function ()
{
var d = this.dateOrdered;
d.setYear(d.getYear+1);
return d.toLocaleString();
}
};
如前所述,我非常喜欢使用这一功能。例如,我现在可以向结构中添加存取方法(getter and setter)来控制结构中的要素将接受的值。这一个示例添加了一个getter(setArrivalDate),它可以确保放到arrivalDate的值比晚于今天的日期。
var salesOrder =
{
arrivalDate: new Date(),
setArrivalDate: function(proposedArrival)
{
var todayDate = new Date();
if (proposedArrival > todayDate)
{
this.arrivalDate = proposedArrival;
}
}, 控件中国网为开发者提供众多的ASP.NET控件以供选择。