原型链

  1. 创建对象的几种方法
1.字面量
  var o={name:'FBB'};
  var o2=new Object({name:'FBB'});
2.构造函数
  function M(name){
    this.name=name;
  }
  var o3=new M('FBB');
3.Object.create()
  var p={name:'FBB'};
  var o4=Object.create(p);
  1. 原型/构造函数/实例/原型链
__proto__属性,指向了创建该对象的构造函数的原型
每个对象都有__proto__属性,Object.prototype.__proto__=null
对象是函数创建的,那么对象的__proto__要指向创建它的构造函数的原型,Object.__proto__==Function.prototype
Function的特殊性Function.__proto__===Function.prototype,函数也是被Function创建的,那么函数的__proto__也应该指向Function的原型,这是一个环形结构,函数的prototype和__proto__属性指向同一个对象
  1. instanceof原理
object instanceof constrictor
instanceof运算符用来测试一个对象在其原型链中是否存在一个构造函数的prototype属性

function instance_of(L,R){
  const R_P=R.prototype;
  L=L.__proto__;
  while(true){
    if (L===null) {
      return false;
    }
    if (L===R_P) {
      return true;
    }
    L=L.__proto__;
  }
}
  1. new运算符

你可能感兴趣的:(原型链)