js原型链

  1. js的对象分为普通对象和函数对象。
  2. 创建对象的三种方法
1
2
3
// 字面量
var o1 = {name: 'o1'}
var o2 = new Object({name: 'o2'})
1
2
3
4
// 构造函数
var M = function (name) {this.name = name}
var o3 = new M('o3')
o3为实例,M为构造函数,实例o3的_proto_指向原型对象,实例o3的构造函数M的prototype指向原型对象,原型对象的constructor指向构造函数M
1
2
3
// Object.create
var p = {name: 'p'}
var o4 = Object.create(p)

输出结果:avatar

  1. proto:Object
    所有对象均有proto
  2. 原型和原型链
    avatar
    对象的proto为原型,原型也是对象,也有proto属性,以此类推,直到找到Object原型
  3. 原型对象和实例
    通过构造函数创建出来的多个实例,给原型添加一个方法,这个原型的所有实例都有这个方法
  4. prototype
    只有函数有prototype,对象没有;函数的proto指向Function.prototype
  5. instanceof原理
    instanceof是判断实例对象的proto和生成该实例的构造函数的prototype是不是引用的同一个地址
    o3 instanceof M及原型链中M以上的构造函数,结果都是true