Skip to content
大纲

原型

设计两个概念,构造函数和原型对象

js
/* Enum就是个构造函数,创建构造函数时,浏览器会自动创建了其原型对象,原型对象中的constructor指向Enum,Enum的prototype指向原型对象 */
  function Enum () {
    this.name = 'Enum'
  }

像Object,String这些都是js自带的构造函数

实例对象

实力对象的没有prototype,但有—__proto__指向原型对象

js
let e = new Enum()
  e.prototype.age = 15
  e.prototype // undefined
  e.__proto__ // {constructor: function Enum () {}}

原型链

当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的__proto__隐式原型上查找,即它的构造函数的prototype,如果还没有找到就会再在构造函数的prototype的__proto__中查找,这样一层一层向上查找就会形成一个链式结构,我们称为原型链

instabceof 检测实例对象的原型对象在不在这个构造函数的原型链上

js
e instanceof Enum
e.__proto__ === Enum.prototype

hasOwnProperty() 和 in 检测属性是否在原型链中

js
dd.hasOwnProperty('name') // true
dd.hasOwnProperty('age')  // true

'name' in dd // true
'age' in dd // true

Released under the MIT License.