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继承与接口,设计模式等等,后期我会陆续不定时分享个人的见解的。