假装写博客 prototype、__proto__、constructor 的作用与区别

*以下全文用[[Prototype]]代表对象真正的原型链

prototype与__proto__的区别
__proto__是真正的原型链,也就是[[Prototype]],使用原型链时,查找对象的属性是通过__proto__来查找,而不是prototype

varFoo=function(){};
Foo.__proto__.a ='b';
Foo.prototype.a ='a';
alert(Foo.a);//b

prototype只是用于构建用new关键字创建的对象,将构造器函数的prototype的引用指向于构建的对象的__proto__

varFoo=function(){};
var test =newFoo();
alert(test.__proto__ ===Foo.prototype);//true

构造器函数的prototype与__proto__是不相同的,其protoype会被构建的对象的[[Prototype]]引用,其[[Prototype]]是Function对象的[[Prototype]],Function对象的prototype与__proto__是相同的

varFoo=function(){};
alert(Foo.prototype ===Foo.__proto__);//false
alert(Function.__proto__ ===Foo.__proto__);//true
alert(Function.__proto__ ===Function.prototype);//true

constructor是什么
constructor也就是构造器函数的引用,一个构造器函数的prototype的constructor也就等于这个构造器函数本身,一个构造器函数的__proto__的constructor,也就是Function的consturctor就等于Function本身

varFoo=function(){};
var test =newFoo();
alert(Foo.constructor ===Function);//true
alert(Foo.prototype.constructor === test.constructor);//true
alert(Foo=== test.constructor);//true
alert(Foo.constructor ===Foo.prototype.constructor);// false
Foo
 |_ protoype
      |_ consturctor  === Foo
      |_ __proto__ === Object.prototype
          |_ constuctor === Object
          |_ __proto__ === null
 |_ __proto__
     |_ __proto__ === Function.protoype
          |_ constuctor === Function
               |_ __proto__ === Object.protoype
                   |_ consturctor === Object
                   |_ __proto__ === null
test
    |_ __proto__ === Foo.protoype
        |_ constructor === Foo
        |_ __proto__ === Object.protoype
            |_ constuctor === Object
            |_ __proto__ === null

只有函数对象才有protoype属性,Object.proto === Function.proto,Object.proto.contructor === Object

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值