对JavaScript的对象模型的思考

首先我不知道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的执行等等. 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值