原型和原型链

152 阅读1分钟

🔥什么是原型链

  1. 创建对象的有几种方法?
  2. 什么是原型?
  3. instanceof的原理是什么?

原型

创建对象的几种方法

  1. 字面量方式进行创建
var obj1 = {name: 'objs'} // 会默认new,和下面obj2的方法效果一样
//或
var obj2 = new Object({name: 'objs'})
输出结果如下:
// {name: "obj"}
  1. 使用构造函数创建对象
function Person(name,age,family) {
    this.name = name;
    this.age = age;
    this.family = family;
    this.say = function(){
        alert(this.name);
    }
}
var person1 = new Person("lisi",21,["lida","lier","wangwu"]);
var person2 = new Person("lisi",21,["lida","lier","lisi"]);
console.log(person1 instanceof Object); //true
console.log(person1 instanceof Person); //true
console.log(person2 instanceof Object); //true
console.log(person2 instanceof Person); //true
console.log(person1.constructor);      //constructor 属性返回对创建此对象的数组、函数的引用
  1. Object.create
var P = {name: 'obj'}
var obj4 = Object.create(P)
输出结果如下:
// {}

创建出来的一个新对象第一个参数是这个对象的原型,通过原型链向上去查找,说了这么多那到底什么是原型?

每个函数都有prototype(原型)属性,这个属性是一个指针,指向一个对象,这个对象的用途是包含特定类型的所有实例共享的属性和方法,即这个原型对象是用来给实例共享属性和方法的。 而每个实例内部都有一个指向原型对象的指针

什么是原型链

由于_proto_是任何对象都有的属性,而js里万物皆对象,所以会形成一条_proto_连起来的链条,递归访问_proto_必须最终到头,并且值是null