javascript面向对象——prototype属性(原型属性)

定义说明:
1、每一个函数都具有一个prototype属性,此属性是一个指针,可以指向一个对象,而此对象将会被由 构造函数 创建的实例化对象所共享,也就是说实例化对象会继承此对象。
2、prototype原型链属性是构造函数的属性,而非实例化对象的属性。
3、prototype原型链属性指向谁?prototy指向的是一个对象,prototype原型属性与实例对象的创建与否没有关系,它在对象创建之前就已经纯在了。在构造函数创建之后,prototy原型属性就相对应的创建出来,但是它是存在于内存中。

问:
实例化对象是怎么指向并继承prototype原型属性指向的那个对象的呢!?
答:
原来其实通过构造函数来创建的实例化对象中会有一个内部属性[[Prototype]],它是一个指针,指向构造函数的原型(prototype)指向的对象,也就是那个存在于内存中的对象。

我们来看看下图:

上图中代码部分如下:
function antzone (name , age){
this . webname = name ;
this . age = age ;
}
antzone . prototype . getname = function () {
return this . webname ;
}
var oantzone = new antzone ( "zhang" , 3 ) ;
alert ( oantzone . getname()) ; //zhang

这上图中左右两边分别指的是什么呢!?
左边其实就是属性,右边是属性值。

图与代码配合解析:
A、解析:
当我们创建出名为antzone的构造函数的时候相对应的原型也就上山图中的antzone prototype就出现了,它是存在于内存中的,我们可以使用 console.info(antzone.prototype) 方法打印出来,在谷歌浏览器的控制台中看看打印的结果。显示的有两个属性constructor与属性getname,getname属性是我们设置的 antzone.prototype.getname = function () {return this.age;} ,但是constructor属性是什么呢!?原来constructor是构造函数,哦!现在我们应该能够明白原来我们所创建的名为antzone的构造函数中的所有属性以及属性值都是保存在原型属性prototype所指向的对象中。

B、那么保存在prototype原型中的属性是什么?
其实保存在原型中的东西就是:
1、constructor构造函数, function antzone(name,age){this.webname = name;this.age = age} 中的属性以及属性值。
2、 antzone.prototype.getname = function () {return this.webname}; 通过原型链创建的属性以及属性值。

C、那么谁又会继承prototype原型中的属性以及属性值呢!?
能够继承prototype原型中的属性以及属性值的是用构造函数创建出来的实例化对象,也就是上面实例中的 var oantzone = new antzone("zhang",3); 这种是赋值传参,通过 [[Prototype]]属性 来指向prototype原型,从而达到继承的效果, [[Prototype]]属性: 通过构造函数来创建的实例化对象中会有一个内部属性[[Prototype]],它是一个指针,指向构造函数的原型(prototype)指向的对象(上面有所讲解)。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值