- chrome 打开终端执行下面的代码,弹出 true。
function SayHello() //先定义一份 SayHello 函数代码
{
alert("Hello, I'm " + this.name);
};
function Person(name) //带参数的构造函数
{
this.name = name; //将参数值赋给给 this 对象的属性
this.SayHello = SayHello; //给 this 对象SayHello 方法赋值为前面那份 SayHello代码。
};
var BillGates = new Person("Bill Gates"); //创建 BillGates 对象
var SteveJobs = new Person("Steve Jobs"); //创建 SteveJobs对象
alert(BillGates.SayHello == SteveJobs.SayHello); //显示:true
上面的效果是同一个方法或类生成的对象使用了同一份方法副本。
chrome 打开终端执行下面的代码,弹出 false 。
function SayHello() //先定义一份 SayHello 函数代码
{
alert("Hello, I'm " + this.name);
};
function Person(name) //带参数的构造函数
{
this.name = name; //将参数值赋给给 this 对象的属性
this.SayHello = function() {alert(this.name);}; //给 this 对象SayHello 方法赋值为前面那份 SayHello代码。
};
var BillGates = new Person("Bill Gates"); //创建 BillGates 对象
var SteveJobs = new Person("Steve Jobs"); //创建 SteveJobs对象
alert(BillGates.SayHello == SteveJobs.SayHello); //显示:true
- 上面的代码说明两个对象各自有一份方法的副本,虽然内容一样,但是是属于各自的副本,指向内存里不同地址,不同对象,随时可以被修改且互不影响。这段代码演示了同一个方法或类生成不同对象,对象各有其方法副本而不会同时操作同一个方法副本。
该段代码和最开始的区别仅仅是引用了已经定义的全局对象、方法,还是直接使用声明式方法体。