关闭

【学习】吃透javascript-prototype

242人阅读 评论(0) 收藏 举报
 首先要理解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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:61519次
    • 积分:810
    • 等级:
    • 排名:千里之外
    • 原创:0篇
    • 转载:115篇
    • 译文:0篇
    • 评论:0条
    文章分类