prototype和__proto__的区别

 1、原型:prototype  每个函数都有一个prototype属性

 2、原型链:__proto__ 每个对象都有__proto属性


/***
 * 原型:prototype  每个函数都有一个prototype属性
 * 原型链:__proto__ 每个对象都有__proto属性
 */
 function Animal(){
    this.type="哺乳类";
 }
 Animal.prototype.type='哺乳';

 console.log(Animal.prototype);
 let animal=new Animal();   //实例对象类型 
 console.log(animal.__proto__==Animal.prototype); //指向当前类的原型,animal 是属于Animal类的
 console.log(animal.type);    // 实例会先找自己的属性,自己没有会沿着原型找到原型
 // 类、 实例(__proto__)==>类的原型(__proto__)

 delete animal.type;  //删掉实例上的属性
 console.log(animal.type);
 console.log(animal.__proto__.__proto__); //Object.prototype
 console.log(Animal.prototype.constructor==Animal);

 console.log(Object.prototype.__proto__);    //null 不是对象类型,不能继续向上找了。
 // Object.prototype.__proto__ 顶层的对象

 // 特殊的 Function Object 可以充当对象,可以充当函数
 // __proto__  prototype  两个都有

 Function.__proto__===Function.prototype     //所属类的原型。 js内部强制的指定,保证统一性
 Object.__proto__===Function.__proto__=== Function.prototype     //Object充当函数的时候,函数的链,对应的就是Function.__proto__

 // 对象的链指向Object==>prototype

 function Animal1(){
     this.a=1;
 }
 Animal1.prototype.b=2;
 let animal1=new Animal1();
 console.log(animal1.hasOwnProperty('a'))   //判断当前属性,是否在实例上。不能判断在原型上的属性
 console.log(a in animal1);  // in关键字 会判断这个属性是否属于原型  或者实例
 // hasOwnProperty 只会看是否存在于当前实例上。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vues

刚好遇见你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值