new命令在执行时会做哪些事情:
(1) 创建一个新对象,作为将要返回的对象实例;
(2)将这个空对象的原型,指向构造函数的prototype属性
(3) 将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象) ;
(4) 执行构造函数中的代码(为这个新对象添加属性)并返回新对象。
例:
function Person(name) {
this.name = name
console.log(this.name)//zs
(可以看出此时this指向p1,即创建的新对象)
}
var p1 = new Person('zs')
console.log(p1);//Person {name: 'zs'}
(执行构造函数中的代码(为这个新对象添加属性)并返回新对象。)
//instanceof运算符用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上
console.log(p1 instanceof Person)//true
(可以看出这个空对象的原型,指向构造函数的prototype属性)
特性:
- 如果构造函数内部有return语句,而且return后边跟着一个对象,new命令会返回return语句指定的内容,否则返回这个创建的对象
- 对于普通函数(内部没有使用this关键字)则会返回一个空对象
function Person(name){
this.name = name
return
{
name:'ls'
}
}
var p2= new Person('zs
console.log(p2)//{name:'ls'}
console.log(p2 instanceof Person)//false
function Person(){
return 'hello world'
}
var p1= new Person()
console.log(p1)//{}
console.log(p1 instanceof Person)//true