javascript----------prototype

 

下面都是个人理解以及查找的网上的资料,如有不对的地方请指正

prototype

prototype在这里是原型的意思,不是指那个框架...

如果有一个function test(){}

它会有一个name属性,值为函数名test  即test.name=="test"        //在 firefox下测试.........

test还有一个constructor属性,他是指向他的构造函数的.... 即test.constructor 指向 Function

test还有一个__proto__属性,他指向他的构造函数的原型 即test.__proto__===Function.prototype

ps: Function.__proto.__,Object.__proto__都是function(){} 不指向任何构造函数

它还有一个prototype属性 ; 即test.prototype={}

 然后 prototype会自动添加一个test.prototype.constructor =test  它是指想函数本身的

/----------------------------个人觉得这个东西理解起来还是不容易(我也不能保证一定理解就是对)-------

prototype还会自动添加一个属性,那就是__proto__ ;

它指向对象的父原型链 (ps不是父原型)
可以修改这个属性,修改后就当前对象的父原型链就改变了

实例后,它的默认值是指向原型对象的 (重上面的test.__proto__===Function.prototype就可以看出来)

/-------------------------------------------------------------------------------------------------------------

可以测试一下 例子如下

 

 

至于prototype.__proto__;单独来写些例子  

Object.prototype为原型链的终点

 

 

 

 

一个类,如何实例化成一个对象了,类里面的prototype里的属性又是怎么成为实例里面的属性的了

这里不得不说一下new 的过程

大概可以分成3步

 

<1> var p={}; 也就是说,初始化一个对象p。

<2> p.__proto__=Person.prototype;

<3> Person.call(p);也就是说构造p,也可以称之为初始化p。

 

 

别人给的一个new的过程

 

 

 

 

 

 

 

如一个类 ,new 之后的对象如下

 

每个对象在初始化的时候都会 __proto__有这么一个属性;

它指向的是父的原型  即Object.prtotype;

 如: (请在firefox下测试)

var test ={};
alert(test.__proto__);
alert(test.__proto__.a);  //出现的是undefined
Object.prototype.a = "test";
alert(test.__proto__.a);  //test

当有一个对象 假如是test ;查找他的a属性,如果找不到,那么他就会去__proto__里找这个属性,如果还找不到,就会到__proto__的__proto__中去找,这样一直找啊找,直到没有__proto__为止,这就是传说中的型链.

 

下面是一个例子;

 

 

另外一个例子  (自己动手修改prototype.__proto__的指向)

 

 

知道了原型链,那也就知道了为什么现在写类都把公共的方法写在原型上,因为可以节省资源嘛..哈哈

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值