JavaScript中的函数是(几乎)其他所有对象的对象。当你这样做:
this.setOptions = setOptions;
你不调用的setOptions
功能,你只是一个引用赋值给函数的性质,完全像一个属性设置为任何其他对象,就像这样:
var dt;
dt = new Date();
this.today = dt;
用的功能,你可以这样做,所以你可以再打通过属性的函数(其中规定了this
值是属性的物体,这是很方便)。这是一个有点清晰这是怎么回事,如果你使用一个不同的名称属性比对功能:
function functionName() { ... } // Declares the function
this.propertyName = functionName; // Sets the property
functionName(); // Calls the function (with `this` = the global object ["window", on browsers])
this.propertyName(); // Also calls the function (but with `this` = the object the property's on)
你确定的模式,声明一个函数,然后分别在对象上的引用设置它,经常用于确保生成的函数具有名称。您可以创建一个功能,并将其绑定到一个像这样的属性:
this.setOptions = function() {
...
};
...但随后的功能没有名(财产的做法,但不是功能),它可以是当您尝试调试时出现问题,因为调试器向您显示各种上下文中函数的名称(例如调用堆栈)。如果很多你的函数没有名字,即使引用它们的属性的确如此,它也会使调试变得困难。 More about anonymous vs. named functions here.(还有在当函数实例化方面有差别,但进入在这里只会使事情变得复杂。)
你以为你可以结合起来的东西,像这样:
this.setOptions = function setOptions() { // <=== DON'T DO THIS
...
};
。 ..虽然这主要起作用,但它触发Internet Explorer/JScript中的错误(它为该代码创建了两个不同的功能,这最多是内存浪费,最坏的情况是一个非常微妙和浪费时间的问题,因为它是in this question )。
嘿,在这种情况下,虽然我不太了解代码中的'this',但你已经调用方法$('div')。functionone.setOptions()?它的目的只是在课堂上内部应用吗? – anthonypliu 2010-06-28 20:07:30
没有上下文,目前还不清楚“this”指向什么。它不必指向当前课程。它可能指向div,就像你用$('div')表示的那样。所以这段代码在diff中添加了一个setOptions方法,这样你就可以执行$('div')。setOptions()。你不能做$('div')。functionone.setOptions(),你不能在这样的函数中调用函数。 – Sjoerd 2010-06-29 06:22:47