教程javascript的function(函数)(3)

作者:子乌 来源:蓝色理想 时间:2007-09-30 13:38:00 

函数:对象

函数是javascript中的一种特殊形式的对象。它是第一个[b〕类数据类型(class data type)。这意味着我们能够给它增加属性。这里有一些需要注意的有趣观点:

对象的创建

就像刚才提及的,当我们定义一个函数时,javascript实际上在后台为你创建了一个对象。这个对象的名称就是函数名本身。这个对象的类型是function。在下面的例子,我们也许不会意识到这一点,但我们实际上已经创建了一个对象:它叫做Ball。

Example 1

CODE:

function Ball()       // 也许看起来有点奇怪,但是这个声明
{                     // 创建了一个叫做Ball的对象
  i=1;
}                    
alert(typeof Ball);     // 结果 "function"


我们甚至能将这个对象的内容打印出来而且它会输出这个函数的实际代码,Example2: 点击 alert(Ball);来看看Ball的内容。

属性的添加

我们能够添加给Object添加属性,包括对象function。因为定义一个函数的实质是创建一个对象。我们能够“暗地里”给函数添加属性。比如,我们这里定义了函数Ball,并添加属性callsign。

CODE:

function Ball()       // 也许看起来有点奇怪,但是这个声明
{                     // 创建了一个叫做Ball的对象,而且你能够
}                     // 引用它或者象下面那样给它增加属性
Ball.callsign="The Ball"; // 给Ball增加属性
alert(Ball.callsign); // 输出 "The Ball"


指针

因为function是一个对象,我们能够为一个function分配一个指针。如下例,变量ptr指向了对象myFunction。

CODE:

function myFunction(message)
{
  alert(message);
}
var ptr=myFunction;  // ptr指向了myFunction
ptr("hello");         // 这句会执行myFunction:输出"hello"


我们能够运行这个函数,就好像这个函数名已经被指针名代替了一样。所以在上面,这行ptr("hello"); 和myFunction("hello");的意义是一样的。

指向函数的指针在面向对象编程中相当有用。例如:当我们有多个对象指向同一个函数的时候(如下):

Example 4A

CODE:

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:

CODE:

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"


标签:function,函数
0
投稿

猜你喜欢

  • js验证表单(form)中的单选(radio)值

    2008-03-18 13:23:00
  • Windows10下安装配置 perl 环境的详细教程

    2022-11-17 01:46:32
  • PHP实现PDF转图片的详细过程(使用imagick)

    2023-09-07 13:27:34
  • 随Linux开机自动启动mysql

    2009-12-29 10:14:00
  • python使用Geany编辑器配置方法

    2021-06-06 22:32:50
  • 用Python实现服务器中只重载被修改的进程的方法

    2022-06-21 05:11:38
  • QQ邮箱的一个文本编辑器代码

    2024-04-29 14:07:13
  • ASP四级联动做法

    2009-07-03 15:35:00
  • pytorch 自定义卷积核进行卷积操作方式

    2021-07-24 22:54:39
  • Python中循环后使用list.append()数据被覆盖问题的解决

    2023-02-08 20:45:49
  • 通过作业调度建立SQL Server的自动备份

    2008-12-09 14:58:00
  • 解析Python3中的Import

    2023-01-10 05:11:47
  • 网页设计标准尺寸

    2008-06-15 15:21:00
  • 如何前后翻阅聊友们的发言?

    2010-01-18 20:49:00
  • Golang中Delve版本太低无法Debug的问题

    2024-04-25 15:18:05
  • pycharm 复制代码出现空格的解决方式

    2023-08-27 12:36:37
  • matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析

    2022-08-31 12:17:15
  • Golang操作sqlite3数据库的详细教程

    2024-01-14 05:32:52
  • javascript cookie的基本操作(添加和删除)

    2024-05-11 09:43:24
  • python处理图片之PIL模块简单使用方法

    2023-06-25 21:42:05
  • asp之家 网络编程 m.aspxhome.com