详解new
阅读本文需要的预备知识:了解对象,构造函数与原型链,this。
一个最简单的使用构造函数创建实例的例子
//创建构造函数
function People(name){
this.name = name;
}
//使用new创建实例对象person
var person = new People("SYJ");
person = {
name: "SYJ"
}
在该代码中,new做了三件事情:
1. var obj = {} //创建一个临时对象;
2. obj.__proto__ = People.prototype //将该临时对象原型指向构造函数原型
3. People.call(obj, "SYJ") //将构造函数中this指向临时对象,并传入参数"SYJ"
4. return obj //返回临时对象,person指向创建的obj对象(对象类型赋值为按引用传递,obj与person指向同一个对象)
相当于
var person = function(){
var obj = {};
obj.__proto__ = People.prototype;
People.call(obj, "SYJ");
return obj;
}()//使用立即执行函数(IIFE)