Javascript之prototype

来源:互联网 发布:安卓java模拟器直装版 编辑:程序博客网 时间:2024/05/14 16:23

Javascriptprototype

文献

[1]  http://www.myowndb.com/blog/?p=26

 

当一个函数被设计来跟new一起使用的时候,称为构造器constructor

因为javascript一方面想跟传统的对象创建方法接近,一方面又想有自己的特点,所以javascript使用构造器的方式比较奇怪。

 

当函数被创建的时候,会被赋给一个prototype成员,prototype是一个对象,该对象包含一个constructor成员,construtor成员指向该函数。并且这个prototype是用来扩展继承于它的对象的重要方法。就目前能看到的情况而言,除了constructorprototype好像没有预定义什么属性,也许还存在其他的预定义属性。

可以将其他成员member加到该函数的prototype中。当函数被new调用创建一个新的对象的时候,这些成员都会被连接link into到这个新对象。

这样可以在没有事先扩展新对象的情况下,通过prototype来添加新的constantsmethods

 

 

假设与问题:

prototype是一个对象,或者准确地说应该是一个对象指针?

为什么prototype能实现继承机制?

    当在当前对象寻找某个属性失败的时候,ECMAScript会在当前对象的prototype指向的对象中继续寻找该属性,以此类推。所以在当前对象调用作为其原型prototype的对象里的属性的时候是可以成功的,所以说当前对象继承了其原型对象的属性,亦即实现了继承机制。

 

关于创建新对象时发生的事情:

    当创建一个新对象的时候,该对象的prototype将指向创建该对象的函数的prototype指向的对象。因此,考虑下面的代码:

    function fConstructor()

{}

fConstructor.prototype.mMethod = function mMethod{};

 

function fNewConstructor()

{}

 

    var oNew = new fConstructor{};

    //change the point of prototype

    fConstructor.prototype = new fNewConstructor{};

    这时,虽然mMethod指向被改变了,但是因为对象oNew的创建在这个改变之前,所以oNew.prototype已经指向了改变之前的,从fConstructor中获取的prototype,并且将继续指向。所以,mMethod的改变对已经创建的对象没有影响,但是会影响下面创建的对象。也是基于oNew.prototype指向了fConstrutor中获取的prototype,如果在创建了对象oNew之后,再改变比如fConstructor.prototype.mMethod指向的函数的话,oNewmMethod也会改变成新的mMethod

 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 用电容笔画画手有触感怎么办 CAD画图线性数字不居中怎么办 3d立体画笔堵塞怎么办 龋齿树脂填充老化后怎么办 小孩补过的牙疼怎么办 颜料弄到墙纸上怎么办 4岁的宝宝不爱涂色怎么办 oppo手机截图存不到相册怎么办 做的ih5保存不了怎么办 小偷偷东西发现后逃跑了怎么办? 网上有人传迷信诅咒怎么办 颜料粘在衣服上怎么办 家里有小偷撬锁怎么办 在家有人在撬门怎么办 6个月的宝宝腹泻怎么办 六个月大的宝宝拉肚子怎么办 六个月宝宝着凉拉肚子怎么办 六个月婴儿着凉拉肚子怎么办 怀孕六个月着凉拉肚子怎么办 六个月的婴儿消化不好怎么办 六个月婴儿不好好吃奶怎么办 六个月婴儿消化不好怎么办 六个月婴儿肠胃不好怎么办 受了惊吓后睡眠不好怎么办 宝宝夏季吃饭不爱带围嘴怎么办 3岁宝宝爱看电视怎么办 新生儿晚上哭闹不睡觉怎么办 档案丢了怎么办失业证 三岁宝宝不合群怎么办 阴唇手术半月了疤痕增生怎么办 宝宝小阴唇黏连怎么办 6个月宝宝阴唇粘连怎么办? 高一孩子不爱上学怎么办 3岁宝宝外阴发红怎么办 40爸妈离婚我该怎么办 小儿吃糖卡住了怎么办 额头撞墙上肿了怎么办 宝宝额头撞肿了怎么办 小孩额头撞肿了怎么办 宝宝撞到额头肿了怎么办 小孩子上一年级语文很差了怎么办?