【学习】吃透javascript-prototype

 首先要理解prototype是什么?每个function对象都有一個prototype的属性。 而prototype本身也就是一個object,所以可以动态的给它增加属性和方法, 我在想为什么设计者要加给这个function加一個原型这个概念呢?  

就是为了让对象共享自己的财富。 

我们在看看下面的代码:

function Person(name)

{

this.name = name; //设置对象属性,每个对象各自一份属性数据

};

Person.prototype.SayHello = function() //给Person 函数的prototype 添加SayHello 方法。

{

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

}

var BillGates = new Person("Bill Gates"); //创建BillGates 对象

var SteveJobs = new Person("Steve Jobs"); //创建SteveJobs 对象

BillGates.SayHello(); //通过BillGates 对象直接调用到SayHello 方法

SteveJobs.SayHello(); //通过SteveJobs 对象直接调用到SayHello 方法

alert(BillGates.SayHello == SteveJobs.SayHello); //因为两个对象是共享prototype 的SayHello,所以显示:

true

 

prototype的特性 一:

上面说明了prototype就是把自己的财富让其他对象共享了。

 

下面我们在定义一個Employee 

Employee.prototype=new Person();

Employee.prototype.show=function(){alert("money")}//动态的增加一個show方法

 

下面是javascript的继承的写法:

function Person(name)

{

this.name = name; //设置对象属性,每个对象各自一份属性数据

};

Person.prototype.SayHello = function() //给Person 函数的prototype 添加SayHello 方法。

{

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

}

 

function Employee(name,money)     //实现继承

{

Person.call(this,name);

this.money=money;

}

Employee.prototype=new Person();   //这里就像一個指针一样 指向了上一级。形参一個链

Employee.prototype.show=function(){alert(this.money)};

 

var employee =new Employee("jons",400);

 

employee.show();

employee.SayHello();

上面的代码说明了prototype不仅可以共享财富,还可以  关联的作用, 就像继承一样。

如果本身的prototype 没有的属性或者方法, 会沿着prototype关联的一级一级的往上查找。 就形参了我们说的原型链

 所以我们体会到了javascript里面的prototype 是很优雅的,扩展性很明显了, 不仅横向的共享多个对象的财富,也纵向的 共享了有祖父的财富.

 

javascript真的很优美, 正是因为它这样的简单和自然。

这prototype就写到这里了, 下一篇我会写闭包模型和 原型模型的,这两者的得与失。

 

 

原文地址:http://blog.csdn.net/dztdztdzt/article/details/6031533

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值