问题描述:
- 创建对象有几种方法
- 原型,构造函数,对象实例,原型链
- instanceof原理
- new运算符,工作原理
创建对象的方法:
var obj={name:'andy'} //字面量创建对象,默认原型指向Object,所以两个可以划分为一类var obj=new Object({name:'andy'})//Object({name:'andy'})
//使用显式的构造函数创建对象var OBJ=function(){this.name="andy"}var o=new OBJ()//OBJ
var P={name:'andt'}var obj=Object.create(P)OBJECT{}
原型,构造函数,实例,原型链:

- 实例:obj1,obj2,obj3
- 构造函数:new 后面的函数,即使没有this
- 原型链:通过prototye(构造函数)和proto(原型对象)层层向上寻找prototype,顶端是Object.prototype终止
- OBJ.proto==Function.prototype
instanceof:
实例对象._protoinstanceof 构造函数.prototype
new 运算符:
- 一个新的空对象被创建。继承自构造函数的原型对象
var foo=function(){this.name="ang"}var f=new foo()//创建空对象f,继承自foo.prototype
- 构造函数foo被执行。执行的时候,相应的传参会被传入,同时上下文(this)会被指定为这个新实例
- 如果构造函数返回了一个”对象”,那么这个对象会取代整个new出来的结果,如果构造函数没有返回对象,则new出来的结果为步骤11创建的对象
//模拟new过程var new2=function(func){//创建空对象,空对象关联构造函数的原型对象var o=Object.create(func.prototype)//执行构造函数var k=func.call(o)//判断构造函数的运行结果是不是对象类型if(typeof k == 'object'){return k}else{return o}}
