JavaScript-----prototype解析

前言

在JavaScript(JS)的学习过程中,我们会接触到各种框架(Ext, JQuery等),在这些框架中为你封装了各种功能,有自定义的类型进行扩展,也有对原有的类型进行功能扩展,在JS开发中也使用了面向对象的思想,但是,在JS中是没有”类“这种类型的,也就没有了extends和implement这些关键字的,所以为了模拟出这些行为,我们需要用到JS中的一个特殊而强大的属性--prototype,下面我们将进行进一步解析,知识有限,有误的地方,欢迎指正。

1.prototype说明

在JS中,任何对象都是有这个属性的,无论是对象还是定义对象的函数都是存在的。在进一步解释之前,我们需要说明一点,在JS中是没有真正的类的,所以不要一上来就有Java中类这个概念,(我的东西就是我的,不会继承给别人)。那么在JS中方法类型就可以分为两种:
1)对象方法(Function看做是一个特殊的对象),在对象中声明的方法
2)prototype方法  在prototype中声明的方法


2.prototype类型

prototype可以分为两种类型,一种是显示的prototype记为prototype,另一种是隐式的prototype记为__proto__,在对象变量中存在的是__proto__这种隐式的属性,而在Function声明的变量中存在的是prototype这种显示的属性,我们可以进行简单的测试,来进一步说明:
function A(){}//A是一个Fucntion类型,我们称为函数
var a=new A();
alert(A.prototype);//存在,是一个对象类型的,调用toString(),方法返回字符串
alert(A.__proto__);//存在,它的是一个Function.prototype对象
alert(a.prototype);//不存在,为定义
alert(a.__proto__);//存在指向A.prototype对象
在此要进一步说明一下A.__proto__的存在,


(图片制作技术有点渣,不要介意)
为什么Object会有__proto__属性指向Function.prototype对象呢?
我们可以发现当我们
alert(Object);时,输出的是
function Object() {
    [native code]
}
说明Object是由function声明产生的,同样的我们测试alert(Function)时,输出的是
function Function() {
    [native code]
}
所以可以解释Object.__proto__&&Function.__proto__
O1和F1的__proto__指向Object和Function的prototype对象
特别说明,只有Object.prototype.__proto__==null,(前提是你没有修改原有的__proto__属性),并且prototype是一个对象,里面包含一些属性,最常见的是constructor属性。
基本上我们将prototype的机制说了一下,其实上面的图片就是原型链,大概的内容就是这些了,关于模拟继承,以及原型机制,将在下一章节解析,欢迎大家来讨论,指正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值