就像适才提及的,当我们界说一个函数时,javascript实际上在靠山为你建设了一个工具。这个工具的名称就是函数名自己。这个工具的范例是function。在下面的例子,我们也许不会心识到这一点,但我们实际上已经建设了一个工具:它叫做Ball。
Example 1
Language:javascript, parsed in: 0.006 seconds, using GeSHi 1.0.7.12
function Ball() // 也许看起来有点奇怪,可是这个声明
{ // 建设了一个叫做Ball的工具
i=1;
}
alert(typeof Ball); // 功效 "function"
我们甚至能将这个工具的内容打印出来并且它会输出这个函数的实际代码,Example 2: 点击 alert(Ball);来看看Ball的内容。
属性的添加我们可以或许添加给Object添加属性,包罗工具function。因为界说一个函数的实质是建设一个工具。我们可以或许“暗地里”给函数添加属性。好比,我们这里界说了函数Ball,并添加属性callsign。
Language:javascript, parsed in: 0.007 seconds, using GeSHi 1.0.7.12
function Ball() // 也许看起来有点奇怪,可是这个声明
{ // 建设了一个叫做Ball的工具,并且你可以或许
} // 引用它可能象下面那样给它增加属性
Ball.callsign="The Ball"; // 给Ball增加属性
alert(Ball.callsign); // 输出 "The Ball"
指针
因为function是一个工具,我们可以或许为一个function分派一个指针。如下例,变量ptr指向了工具myFunction。
Language:javascript, parsed in: 0.006 seconds, using GeSHi 1.0.7.12
function myFunction(message)
{
alert(message);
}
var ptr=myFunction; // ptr指向了myFunction
ptr("hello"); // 这句会执行myFunction:输出"hello"
我们可以或许运行这个函数,就仿佛这个函数名已经被指针名取代了一样。所以在上面,这行ptr("hello"); 和myFunction("hello");的意义是一样的。
指向函数的指针在面向工具编程中相当有用。譬喻:当我们有多个工具指向同一个函数的时候(如下):
Example 4A
Language:javascript, parsed in: 0.021 seconds, using GeSHi 1.0.7.12
function sayName(name)
{
alert(name);
}
var object1=new Object(); // 建设三个工具
var object2=new Object();
var object3=new Object();
object1.sayMyName=sayName; // 将这个函数指派给所有工具
object2.sayMyName=sayName;
object3.sayMyName=sayName;
object1.sayMyName("object1"); // 输出 "object1"
object2.sayMyName("object2"); // 输出 "object2"
object3.sayMyName("object3"); // 输出 "object3"
因为只有指针被生存(而不是函数自己),当我们改变函数工具自身的时候,所有指向谁人函数的指针城市产生变革。我们可以或许在底下看到:
Example 5:
Language:javascript, parsed in: 0.016 seconds, using GeSHi 1.0.7.12
function myFunction()
{
alert(myFunction.message);
}
myFunction.message="old";
var ptr1=myFunction; // ptr1 指向 myFunction
var ptr2=myFunction; // ptr2 也指向 myFunction
ptr1(); // 输出 "old"
ptr2(); // 输出 "old"
myFunction.message="new";
ptr1(); // 输出 "new"
ptr2(); // 输出 "new"
指针的指向