标签归档:Javascr

JavaScript原型链知识点总结

在学习JavaScript的时候,原型链总是困扰着我,对它的概念一直模模糊糊。在查阅资料书籍之后,总结了以下知识点,希望能对大家有帮助

构造函数的prototype和实例的__proto__关系

  • 函数的默认prototype包含constuctor和__proto__,constructor指向其构造函数自身
  • 通过new创建的对象,包含__proto__(指向构建函数的prototype),但是不包含prototype(因为实例不会有prototype,有prototype的只能是Function类型)
  • 所以基于上面两点,构造函数和实例之间通过__proto__指针进行关联,这也是为什么要在构建函数.prototype定义方法和变量域让所有实例可以访问

prototype和__proto__之间的关系

  • 大部分类型的值都有__proto__,比如String,NaN(number),true等。同理可得 “test”.
    __ proto__.constructor === String输出为true
  • 只有Function才有prototype,其他类型的值都没有(包括new出来的实例也没有)
  • 修改Function.prototype,那么在下次new实例的时候,将会以新的prototype进行初始化,__proto__也会指向新的prototype
  • 修改构造函数的prototype一般有两种方式,我常用后者,因为不会对原有的赋值对象有影响:
第一种:
  func100.prototype = func200
  func100.prototype.constructor.name = func200.name
第二种:
  func100.prototype =