您现在的位置: 网页制作教程网 >> 网页特效 >> Javascript 教程 >> 文章正文
作者:Sheneyan
来源:蓝色理想
热度:
2006-11-15 16:50:53
将函数作为属性
任何类型的对象都可以作为一个属性,回忆一下前面的Example 4(不是Example DT4),函数也是一个对象。所以你可以让一个函数作为一个对象的一个属性。下面,我将添加两个函数getSalary和addSalary。
Example DT7
CODE:
|
function Employee(name, salary) this.addSalary=addSalaryFunction; this.getSalary=function() var boss=new Employee("John", 200000); |
addSalary和getSalary演示了几种将函数赋给属性的不同方法。如果你记得我们最开始的讨论;我讨论了三种声明函数的不同方式。所有那些在这里都是适用的,但是上面展示的两个最常用。
让我们看看有什么不同。下面,注意一下9-12行的代码。当这部分代码执行的时候,函数getSalary被声明。如前面数次提到的,一个函数声明的结果是一个对象被创建。所以这时候boss被创建(接下来的第19行),而boss里有一个getSalary属性。
CODE:
|
function Employee(name, salary) this.addSalary=addSalaryFunction; this.getSalary=function() var boss=new Employee("John", 200000); |
当你创建这个对象的更多实例时(boss2和boss3),每一个实例都有一份getSalary代码的单独拷贝;而与此相反,addSalary则指向了同一个地方(即addSalaryFunction)。

看看下面的代码来理解一下上面所描述的内容。
Example DT8
CODE:
|
function Employee(name, salary) this.addSalary=addSalaryFunction; var boss1=new Employee("John", 200000);
// 给addSalary函数对象添加属性 |
也许不是重要的事情,但这里有一些关于运行类似上面的getSalary的内嵌函数的结论: 1) 需要更多的存储空间来存储对象(因为每一个对象实例都会有它自己的getSalary代码拷贝);2) javascript需要更多时间来构造这个对象。
让我们重新写这个示例来让它更有效率些。
Example DT9
CODE:
|
function Employee(name, salary) this.addSalary=addSalaryFunction; function addSalaryFunction(addition) |
看这儿,两个函数都指向同一个地方,这将会节约空间和缩短构造时间(特别是当你有一大堆内嵌函数在一个构造函数的时候)。这里有另外一个函数的功能能够来提升这个设计,它叫做prototype,而我们将在下一节讨论它。
我来说两句:
推荐文章
相关文章