对JavaScript的对象模型的思考

来源:互联网 发布:大河剧 知乎 编辑:程序博客网 时间:2024/05/16 15:15

首先我不知道JavaScript到底是怎么实现的,我只是建立一个模型能够跟实际的情况不矛盾.之前我深入研究了JavaScript高级程序设计

1. 建立Object对象的时候该对象的prototype属性和constructor属性都是undefined,但当调用这两个属性就建立新的Object对象和Object函数对象并引用.否则就没完没了了.

2. 当建立
function XX(){
 ...
}
就建立XX函数对象,以这种方式建立的函数对象的constructor属性是undefined.prototype属性引用另一个Object对象.

3. 当var x = new XX()的时候,JavaScript先建立2个Object对象(o1和o2),x引用o1,o1的prototype引用o2,o1的constructor引用XX对象,并在o1中建立一些变量引用XX对象的prototype中的所有引用类型变量,建立一些变量复制XX对象的prototype中的所有基本类型变量.最后执行XX()函数,若函数中有this关键字时,将this替换成x.

4. 在调用x的属性时,若x中没有该属性的时候,就去x.contructor.prototype中查找该属性.若没有则到x.contructor.prototype.contructor.prototype中找,以此类推.

5. 使用x instanceof XX时,将通过查看x.constructor属性的对象是否为XX,若是就返回true,若不是则找x.constructor.prototype.constructor是否是XX,以此类推最后当constructor是undefined时,也就是到了Object对象了都不符合就返回false.

这种模型可以很好的解释原形链的继承方式,极晚绑定,function方式定义函数的高效性,instanceof的执行等等. 

原创粉丝点击