您的位置:首页 > Web前端 > JavaScript

谈谈我对javaScript里prototype的看法

2015-09-16 17:36 447 查看
javaScript创建每一个函数fn时,都会有一个ptototype属性,这个prototype其实就是一个指针,而这个指针总指向一

个原型对象,这个原型对象的用途就是将特定的属性或者方法包含在自己内部,从而实现了一个所有实例共享的作用。

什么?你还不明白,好吧!我简单来给你解释下吧,在解惑时,我得先让你跟着我的思路理一下。不然你会不知道我

在说什么了。

万物皆对象,好色如狼的我很自然地把女孩当成一个对象即javaScript里的一个Function,说白了就是我把女孩这比喻

成javaSript的一个函数。而我呢。则意淫成是她的男朋友,(哈哈,开玩笑,我这样的人是没有女朋友的),暂时抛开尘观念

且为了简单化。我将做爱这行为定义成一个函数。代码如下:

//定义一个空的函数(女孩)
function Mm(name,age){
this.name=name;
this.age=age;
this.Sex=SexWithBoy;//调用外部性行为这方法
};
//定义一个空的函数(男孩)
function Gg(name,age){
this.name=name;
this.age=age;
this.Sex=SexWithBoy;//正常调用外部性行为这方法(现实中,这也是可以的。)
};
//性行为
function SexWithBoy(){
console.info('You can have Sex with me.');
};
//实例化对象
var mm=new Mm('pertty',22);  //实例出一个名字叫‘pertty’,年龄为22岁的女孩出来
//通过实例对象mm可调用她的属性与方法行为,如
console.info(mm.name);  // pertty
console.info(mm.age);// 22
mm.Sex();// you can have sex with me.
//实例化对象
var gg=new Gg('handsome',23);//实例出一个名字叫‘handsome’,年龄为23岁的男孩出来
//通过实例对象mm可调用他的属性与方法行为,如
console.info(gg.name); // handsome
console.info(gg.age);// 23
mm.Sex();// you can have sex with me.


你看到了吗?实例化出来的那个男孩居然也可以成功地执行了SexWithBoy这方法,是不是觉得好可怕啊!男孩与男

孩居然也可以做爱了,虽说,现实是可以的。不过,还是挺让妹子们难过的。刚才开始我对于这现象至少是麻木觉得与

已不相关的。甚至来说,我是开心的。毕竟,在追寻女朋友的道路上,我又少了两个对手。可真正让我面对着妹子们那

双伤心的眼神时,我于心不忍。我只好哄她们开心。于是,我教她们这样做,将可以与男孩做爱这一行为只绑定到女孩

这函数的原型里,这样,SexWithBoy这方法只能在妹子们间可以调用。而男孩们就不会再拥有调用SexWithBoy这方法的

权限了。代码根据上面的稍作修改就可实现此需求,具体如下:

// 定义一个空的函数(女孩)
function Mm(name,age){
this.name=name;
this.age=age;
// this.Sex=SexWithBoy();//调用外部性行为这方法
};
// 在女孩的原型上,自定义私有属性与行为
Mm.prototype={
// 切记,这里一定要记住了。如果这里忘记写了,女孩的心又会跑到国民老公那里去了(注意:
// 如果少写这部分的话,代码运行起来,它的作用域总是会指向Object,而不是自己本身。)
// constructor:Mm,
constructor:Mm, // 指向当前自己本身
// 这样编写就可以将SexWithBoy这方法绑定到女孩的原型上了,
SexWithBoy:function(){
console.info('You can have Sex with me.');
}
};
// 定义一个空的函数(男孩)
function Gg(name,age){
this.name=name;
this.age=age;
//this.SexWithBoy=SexWithBoy;// 此次调用外部性行为这方法将会出现未定义此方法的错误(// 现实中,这也是可以的。)
};
// 性行为
// function SexWithBoy(){
// console.info('You can have Sex with me.');
// };
// 实例化女孩pertty对象
var mm=new Mm('pertty',22);  // 实例出一个名字叫‘pertty’,年龄为22岁的女孩出来
// 通过实例对象mm可调用她的属性与方法行为,如
console.info(mm.name);  // pertty
console.info(mm.age);// 22
mm.SexWithBoy();// you can have sex with me.
// 实例化女孩pertty2对象
var mm2=new Mm('pertty',20);  // 实例出一个名字叫‘pertty2’,年龄为22岁的女孩出来
// 通过实例对象mm可调用她的属性与方法行为,如
console.info(mm2.name);  // pertty2
console.info(mm2.age);// 20
mm2.SexWithBoy();// you can have sex with me.
// 实例化对象
var gg=new Gg('handsome',23);// 实例出一个名字叫‘handsome’,年龄为23岁的男孩出来
// 通过实例对象mm可调用他的属性与方法行为,如
console.info(gg.name); // handsome
console.info(gg.age);// 23
gg.SexWithBoy();// TypeError: gg.SexWithBoy is not a function


看到了吗?这次将SexWithBoy这方法绑定到了女孩(Mm)这原型上,就只有女孩这对象可以分享与男孩做爱的快乐了,而男孩想调用此方法时,立马给抛出gg.SexWithBoy is not a function 这种错误。好了,这样将方法绑定到固有的对象的原型对象上,就可以实现所有实例的共享的作用了。而对于其它外部的对象实例并不可使用!

这就我的javaScript的原型prototype解说。懂了吗?。我这种一脑袋色情的人来讲,觉得这解释是可以让我接受理解的。因此,为了更好地去消化它,我不得不以色情的事物对号入座来帮我更好地理解这prototype。好色并不是我的错,错的是我用色情眼光来看待一些事物上。只要用到对的地方上去,就会有它的价值了。好了,废话不多讲。希望,你可以明白!这原型的作用范围域就OK啦!

这样简单的在原基础上作了修改,我就又将再次地看到了妹子们脸上的笑容是那么的可爱。我本以为妹子们就会因此而爱上了我!不过,我发现我错了,她们还是选择了别人,我心好累!不过,我相信,总是会找到一个就是喜欢我这么好色的狼的女孩!我一直在期待着她的到来!

PS:代码其实还有可优化的地方,但主要是为了简单起见。就不再细谈了。关于javaScript继承与接口,设计模式等等,后期我会陆续不定时分享个人的见解的。

附件:http://down.51cto.com/data/2366140
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javaScript java