alert(manager.name+"/'s supervisor is "+manager.supervisor.name);
会输出什么呢?运行示例
就像你在上面这个例子中看到的那样,manager和teamLeader都有一个supervisor属性,而这个属性是范例Employee的一个工具。
将函数作为属性任何范例的工具都可以作为一个属性,回想一下前面的(不是Example DT4),函数也是一个工具。所以你可以让一个函数作为一个工具的一个属性。下面,我将添加两个函数getSalary和addSalary。
Example DT7
Language:javascript, parsed in: 0.021 seconds, using GeSHi 1.0.7.12
function Employee(name, salary)
{
this.name=name;
this.salary=salary;
this.addSalary=addSalaryFunction;
this.getSalary=function()
{
return this.salary;
};
}
function addSalaryFunction(addition)
{
this.salary=this.salary+addition;
}
var boss=new Employee("John", 200000);
boss.addSalary(10000); // boss 长了 10K 人为……为什么老板人为可以长这么多:'(
alert(boss.getSalary()); // 输出 210K……为什么默认人为也那么高……:'(
addSalary和getSalary演示了几种将函数赋给属性的差异要领。假如你记得我们最开始的接头;我接头了三种声明函数的差异方法。所有那些在这里都是合用的,可是上面展示的两个最常用。
让我们看看有什么差异。下面,留意一下9-12行的代码。当这部门代码执行的时候,函数getSalary被声明。如前面数次提到的,一个函数声明的功效是一个工具被建设。所以这时候boss被建设(接下来的高亮行),而boss里有一个getSalary属性。
Language:javascript, parsed in: 0.022 seconds, using GeSHi 1.0.7.12
function Employee(name, salary)
{
this.name=name;
this.salary=salary;
this.addSalary=addSalaryFunction;
this.getSalary=function()
{
return this.salary;
};
}
function addSalaryFunction(addition)
{
this.salary=this.salary+addition;
}
var boss=new Employee("John", 200000);
var boss2=new Employee("Joan", 200000);
var boss3=new Employee("Kim", 200000);
当你建设这个工具的更多实例时(boss2和boss3),每一个实例都有一份getSalary代码的单独拷贝;而与此相反,addSalary则指向了同一个处所(即addSalaryFunction)。
看看下面的代码来领略一下上面所描写的内容。
Example DT8
Language:javascript, parsed in: 0.035 seconds, using GeSHi 1.0.7.12
function Employee(name, salary)
{
this.name=name;
this.salary=salary;
this.addSalary=addSalaryFunction;
this.getSalary=function()
{
return this.salary;
};
}
function addSalaryFunction(addition)
{
this.salary=this.salary+addition;
}
var boss1=new Employee("John", 200000);
var boss2=new Employee("Joan", 200000);
// 给getSalary函数工具添加属性
boss1.getSalary.owner="boss1";
boss2.getSalary.owner="boss2";
alert(boss1.getSalary.owner); // 输出 "boss1"
alert(boss2.getSalary.owner); // 输出 "boss2"
// 假如两个工具指向同一个函数工具,那么
// 上面两个输出都应该是“boss2”。
// 给addSalary函数工具添加属性
boss1.addSalary.owner="boss1";
boss1.addSalary.owner="boss2";
alert(boss1.addSalary.owner); // 输出 "boss2"
alert(boss2.addSalary.owner); // 输出 "boss2"
// 因为两个工具都指向同一个函数,(子乌注:原文写are not pointing to the same function,疑为笔误)
// 当修改个中一个的时候,会影响所有的实例(所以两个都输出“boss2”).