JavaScript之对于prototype和_proto_的理解

        学习了JavaScript,觉得有必要对函数对象的prototype属性和普通对象的_proto_属性着重理解一下。
         首先,万物皆对象。而对象又可分为函数对象和普通对象,当我们去用New Function()的时候,创建的就是函数对象。除开这种情况其他的都是普通对象,就如以下例子:
 
// 
var  f1 = function ( ) { } ;
var  function  f2 ( ) { } ;
var  f3 = new  Function ( 'a' , 'b' ) ;
//  
var  o1 = { } ;
var  o2 = new  f3 ( ) ;
var  o3 = new  Object ( ) ;
     其中f1,f2归根结底还是用New Founction去创建的,所以是函数对象。
     对于函数对象才有prototype属性,这个属性就是原型对象,这个原型对象其实就是一个普通对象(Function.prototyp除外),它没有prototype属性 
 
function  f1 ( ) { } ;
console . log ( f1 . prototype )  //f1{}
console . log ( typeof  f1 . prototype )  //Object
 
      从以上第二行代码可以看出,f1.prototype就是f1的一个实例对象 。就是在创建f1的时候,创建了他的一个实例对象并赋值给他的prototype属性,如下:
 
  var  te = new  Function ( ) ;
  Function . prototype = te ;
 
      那么,这个属性有什么作用呢?继承作用,相当于将函数对象的公有属性放在prototype中,那么函数对象的实例会共享这些属性。
 
var  function  f1 ( name ) {
     this . name ;
}
f1 . prototype . getName = function ( ) {
     return  this . name ;
}
var  hty = new  f1 ( 'hutianyi' ) ;
hty . getName ( ) ; //hutianyi
 
     再说说_proto_属性,这个属性指向的是创建这个对象的函数对象的prototype属性,一层一层的对象继承就是以prototype为实体_proto_为连接纽带实现的。把这个有_proto_串起来的直到Object.prototype._proto_为null的链叫做原型链。
     
     总结
     1.原型和原型链是JS实现继承的一种模型。
     2.原型链的形成真正是靠_proto_而非prototype 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值