原型链类
javascript
1. 创建对象有几种方法
- 默认这个对象的原型链指向 Object
var o1 = {name:'o1'}; // 字面量var o11 = new Object({name:'o11'}); //new Object
- 使用显示的构造函数来创建对象
var M = function(){this.name='o2'};var o2 = new M();
- 使用显示的构造函数来创建对象
var p = {name:'p'};var o4 = Object.create(p);把参数中的这个对象作为一个新对象的原型对象赋于 o4,只能通过原型链来找 name 属性
2. 原型、构造函数、实例、原型链
- 实例:o1、o11、M、o2、p、o4
- 构造函数:被 new 使用的函数
- 构造函数使用 new 运算符生成实例
- 构造函数通过
prototype
属性初始化一个对象,即原型对象 - 原型对象如何区分被哪个构造函数所引用,通过原型对象的构造器
constructor
来指向生成的函数 - 原型链:从一个实例往上找构造这个实例相关联的对象,这个关联的对象再往上找,它又有创造它的上一级的原型对象,以此类推,直到
objrct.prototype
原型终止。主要通过prototype
和__proto__
实例
instanceof 的原理
- 判断实例对象的
__proto__
与构造函数的prototype
是不是同一个引用,只要在这条原型链的构造函数都是这个实例对象的构造函数 - 用
constructor
比用instanceof
更加严谨
- 一个新对象被创建,它继承自 foo.prototype
- 构造函数被执行。执行的时候,相应的参数会被传入,同时上下文「this」会被指定为这个新实例。new foo 等同于 new foo(),只能用在不传递任何参数的情况。
- 如果构造函数返回了一个「对象」,那么这个对象会取代整个 new 出来的结果。如果构造函数没有返回对象,那么 new 出来的结果为步骤1的对象。
实例:
原型链
License
- 可以拷贝、转发,但是必须提供原作者信息,同时也不能将本项目用于商业用途。