主要介绍函数中有无 return 与是否用 new 调用时的异同
有new无return(构造函数)
function Person(){
this.name = 'heart';
}
var person = new Person();
console.log(person.name); //heart
有new有return(寄生模式)
return 简单数据类型 和构造函数一样
function Person(){
this.name = 'heart';
var name = 'walker';
return name;
}
var person = new Person();
console.log(person.name); //heart
return 返回复杂数据类型(寄生模式)
function Person(){
this.name = 'heart';
return {
name: 'walker'
};
}
var person = new Person();
console.log(person.name); //waker
此时的 person 是 return出来的对象
无new无return
function Person(){
this.name = 'heart';
}
var person = Person();
console.log(person.name); //报错
好吧, 其实这里 Person 不应该大写, 这就是给 变量 person 赋函数 Person 的调用返回值
无new有return
function Person(){
this.name = 'heart';
return {
name: 'walker'
};
}
var person = Person();
console.log(person.name); //walker
** 注: ** 在这种情况看起来与寄生模式很相似, 但它会在全局对象中创建了一个新的名为 name 的属性, 可以通过 window.name 或 name直接访问, 当然在严格模式下由于 this 不会指向全局对象, 这段代码会报错