javascript随记总结之_proto_与prototype的不同

今天再看js高级程序设计时突然对_proto_与prototype感到了困惑所以在搜索了相关的资料之后,我来总结一下两者的不同,哪一点不对还请大家指出来多谢指教!

首先_proto_是隐式原型而prototype是显式原型

_proto_的由来:当调用构造函数创建一个新的新的事例后,该实例的内部将包含一个指针(它是内部属性)在ECMA5中管这个指针叫[Prototype],当时在脚本中没有标准的方式访问[Prototype],但除了IE其他主流浏览器在每一个对象上都支持一个属性_proto_来访问[Prototype],而在其他实现中这个属性对于脚本完全不可见(这一点是js高级程序设计上说的我也不太理解,如果有懂的可以说一下吗),也可以用Object.getPrototypeOf()这个方法来返回这个对象的原型这是ECMA5中新增的一个方法。

function fresh(){
}
fresh.prototype.name="a";
fresh.prototype.year=22;
var a=new fresh();
a.name="b";
var b={};
alert(Object.getPrototypeOf(a)==fresh.prototype);//true

 __proto__: __proto__指向的是构造函数的原型对象,任何对象都有这个属性。这个链接是存在于实例与构造函数的原型对象之间的不是实例与构造函数之间。下面我就用几个例子来说明一下 __proto__与Prototype的关系。
 

function a(){
}
var b=new a();
alert(b.__proto__===a.prototype);//true
 
 

prototype:这个在js高级程序设计书中这样定义,只要创建一个函数就会根据一组规则为该函数创建一个prototype属性,他是指向函数的原型对象需要注意的是

Function的__proto__指向其构造函数Function的prototype;

Object作为一个构造函数(是一个函数对象!!函数对象!!),所以他的__proto__指向Function.prototype;

Function.prototype的__proto__指向其构造函数Object的prototype;

Object.prototype的__proto__指向null这是规定;

自己动手在控制台写变量来验证,并加深理解。


还有获取原型对象的一个方法  Object.getPrototypeOf()返回目标对象的原型对象

注意:原型最初只包含constructor属性,而且该属性也是共享的,因此可以通过对象实例访问。

function a(){
}
a.prototype.name="w";
var b=new a();
b.name="m";
alert(Object.getPrototypeOf(b).name);//这个例子是利用原型实现继承,是继承一个非常重要的思想

有一个方法用来确定对象之间是否存在某种关系,就是括号内对象的__proto__如果指向调用该方法对象的prototype就返回true

function a(){
}
a.prototype.name="w";
var b=new a();
b.name="m";
alert(a.prototype.isPrototypeOf(b));

 

constructor是作为prototype的属性存在的指向构造函数

var obj={};
            alert(obj.__proto__.__proto__===null)        //true
            alert(obj.__proto__.constructor===Object)        //true
            alert(obj.__proto__.constructor.__proto__===Function.prototype)     //true
          alert(obj.__proto__.constructor.__proto__.__proto__===Object.prototype) //true  下面有图具体每一个阶段都对应谁,这个会了这个知识点就会了
 

谢谢您的观看,哪里不足或不正确欢迎指点!

 




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值