首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

javascript的__proto__和prototype

2024-12-15 来源:花图问答
js.jpg
javascript的所有一切的起源是null。以null为原型,产生了一切Object,包括函数也是Object。但是null本省不是Object,其它都是。
任何一个Object都有一个__proto__指向自己构造函数的所对应的原型。
当声明一个函数时,如
function Foo(){}

函数申明时,都会产生以自己命名的构造函数,并产生一个原型。每个函数都有自己的原型,如Foo.prototypejavascript内部定义的函数也都有自己的prototype,默认只有函数对象拥有该属性。并且该属性的值指向它对应的prototype

Object->Object.prototype
Number->Number.prototype
Function->Function.prototype

因为函数本省也是对象,所以函数也有自己的__proto__,他们都指向Function.propetype。因为他们是通过Function构造函数构造的。比如上述的Foo函数,就有

Foo.__proto__===Function.protype;
Foo.prototype===Foo.prototype;
var foo1=new Foo();
var foo2=new Foo();
foo1.__proto__===foo2.__proto__;
foo1.__proto__===Foo.prototype;

任何一个函数的prototype都是一个Object。所以它们本身也有__proto__属性。
总结以上内容,对于__proto__

  • 所有js对象都有__proto__
  • __proto__指向当前对象的构原型,也就是申明函数是产生的函数.prototype。(函数对象本身也符合这个规则,它的申明函数原型是Function.prototype)
  • 函数.prototype本身也是对象,所以它的__proto__也存在。所有非Object函数函数.prototype__proto__都是Object.prototype。而Object.prototype__proto__null
显示全文