悟透JavaScript之原型扩展 ---(2)

原型模型需要一个构造函数来定义对象的成员,而方法却依附在该构造函数的原型上。大致写法如下:

//定义构造函数

function Person(name)

{

this.name = name; //在构造函数中定义成员

};

//方法定义到构造函数的prototype

Person.prototype.SayHello = function()

{

alert("Hello, I'm " + this.name);

};

 

//子类构造函数

function Employee(name, salary)

{

Person.call(this, name); //调用上层构造函数

this.salary = salary; //扩展的成员

};

//子类构造函数首先需要用上层构造函数来建立prototype 对象,实现继承的概念

Employee.prototype = new Person() //只需要其prototype 的方法,此对象的成员

没有任何意义!

//子类方法也定义到构造函数之上

Employee.prototype.ShowMeTheMoney = function()

{

alert(this.name + " $" + this.salary);

};

var BillGates = new Person("Bill Gates");

BillGates.SayHello();

var SteveJobs = new Employee("Steve Jobs", 1234);

SteveJobs.SayHello();

SteveJobs.ShowMeTheMoney();

原型类模型虽然不能模拟真正的私有变量,而且也要分两部分来定义类,显得不怎么优雅。不过,对象间的方法是共享的,不会遇到垃圾回收问题,而且性能优于闭包模型。正所谓有失必有得嘛。在原型模型中,为了实现类继承,必须首先将子类构造函数的prototype 设置为一个父类的对象实例。创建这个父类对象实例的目的就是为了构成原型链,以起到共享上层原型方法作用。但创建这个实例对象时,上层构造函数也会给它设置对象成员,这些对象成员对于继承来说是没有意义的。虽然,我们也没有

给构造函数传递参数,但确实创建了若干没有用的成员,尽管其值是 undefined ,这也是一种浪费啊。唉!世界上没有完美的事情啊!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值