悟透JavaScript之构造对象(1)

好了,接下我们来讨论一下对象的另一种创建方法。

JSON 外,在JavaScript 中我们可以使用new 操作符结合一个函数的形式来创建对象。例如:

function MyFunc() {}; //定义一个空函数

var anObj = new MyFunc(); //使用new 操作符,借助MyFun 函数,就创建了一个对

JavaScript 的这种创建对象的方式可真有意思,如何去理解这种写法呢?

其实,可以把上面的代码改写成这种等价形式:

function MyFunc(){};

var anObj = {}; //创建一个对象

MyFunc.call(anObj); //anObj 对象作为this 指针调用MyFunc 函数

我们就可以这样理解,JavaScript 先用new 操作符创建了一个对象,紧接着就将这个对象作为this参数调用了后面的函数。其实,JavaScript 内部就是这么做的,而且任何函数都可以被这样调用!但从 “anObj = new MyFunc()” 这种形式,我们又看到一个熟悉的身影,C++C#不就是这样创建对象的吗?原来,条条大路通灵山,殊途同归啊!

君看到此处也许会想,我们为什么不可以把这个MyFunc 当作构造函数呢?恭喜你,答对了!JavaSc

ript 也是这么想的!请看下面的代码:

 function Person(name) //带参数的构造函数

{

this.name = name; //将参数值赋给给this 对象的属性

this.SayHello = function() {alert("Hello, I'm " + this.name);}; //this

对象定义一个SayHello 方法。

};

 

 function Employee(name, salary) //子构造函数

{

 Person.call(this, name); //this 传给父构造函数

this.salary = salary; //设置一个this salary 属性

this.ShowMeTheMoney = function() {alert(this.name + " $" + this.salar

y);}; //添加ShowMeTheMoney 方法。

};

 

var BillGates = new Person("Bill Gates"); //Person 构造函数创建BillGates

对象

var SteveJobs = new Employee("Steve Jobs", 1234); //Empolyee 构造函

数创建SteveJobs 对象

 

BillGates.SayHello(); //显示:I'm Bill Gates

SteveJobs.SayHello(); //显示:I'm Steve Jobs

SteveJobs.ShowMeTheMoney(); //显示:Steve Jobs $1234

 

alert(BillGates.constructor == Person); //显示:true

alert(SteveJobs.constructor == Employee); //显示:true

alert(BillGates.SayHello == SteveJobs.SayHello); //显示:false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值