prototype和__proto__的关系和区别

1.prototype(原型对象)

每个函数都有一个prototype属性,它是一个指向原型对象的指针,原型对象在定义
函数时同时被创建,原型对象的用途是包含所有实例共享的属性和方法
function Person(){
}
//自定义原型对象的属性和方法
Person.prototype.name="Tom";
Person.prototype.age=25;
Person.prototype.sayName=function(){
  alert(this.name);
};
//原型对象中的所有属性和方法 都会自动被所有实例所共享
var person1=new Person();
var person2=new Person();
person1.sayName();//Tom
person2.sayName();//Tom
只要创建了一个新函数,每个函数在创建之后都会获得一个prototype的属性,这个
属性指向函数的原型对象(原型对象在定义函数时同时被创建),此原型对象又有一
个名为“constructor”的属性,反过来指向函数本身,达到一种循环指向

2._ proto _

当调用构造函数创建一个新实例后,该实例的内部将包含一个指针[[Prototype]],
该指针指向创建它的构造函数的原型,在脚本上没有标准的方法来访问
[[Prototype]],但大多数浏览器都支持通过__proto__来访问。
function Person(){
}
//自定义原型对象的属性和方法
Person.prototype.name="Tom";
Person.prototype.age=25;
Person.prototype.sayName=function(){
  alert(this.name);
};
//原型对象中的所有属性和方法 都会自动被所有实例所共享
var person1=new Person();
var person2=new Person();
person1.sayName();//Tom
person2.sayName();//Tom
alert(person1.__proto__===Person.prototype);//true

3.总结

1.只要创建了一个函数,该函数的原型对象也随之同时被创建出来,原型对象中的属性
  和方法被经由其相对应的构造函数所创建的实例所共享

2.每个函数在创建之后都会获得一个prototype的属性,这个属性指向该函数的原型对象

3.每个实例对象的__proto__属性都指向其构造函数的原型

4.区别

1.prototype 指向一块内存,这个内存里面有共用属性,而 __ proto __ 指向同一块内存。

2.prototype 和__ proto __ 的不同点在于:prototype 是构造函数的属性,而 __ proto __ 是对象的属性

3.如果没有 prototype,那么共用属性就没有立足之地如果没有 __ proto __,那么一个对象就不知道自己的共用属性有哪些。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值