前端开发

js new一个函数和直接调用函数的区别

2018-08-22  本文已影响0人  壹豪

第一种情况(无返回值)

function Person(name){
    this.name=name;
    this.sayName=function(){
        console.log(this.name);
    };
}
const a = Person('张三');//执行了Person('张三'),但是没有返回值
//a=执行后的Person('张三')=无返回值=undefined
const b = new Person('李四');//新建了一个Person('李四')对象
a.sayName();//报错
b.sayName();//李四
window.sayName();//张三

为什么会出现这种情况?

第二种情况(有返回值)

//返回数值类型
function Person1(name)  {  
    this.name = name;  
    return this.name;  
}  
var a1= new Person1('张三');   //新建了一个Object 对象,它有一个name 属性,并且返回一个字符串test 
var b1 = Person1('李四');    // 函数Test()属于Function对象,返回"test"字符串,所以test2单纯是一个字符串  
console.log(a1)//Object
console.log(b1)//李四
console.log(a1.name)//张三
console.log(b1.name)//undefined

//返回引用类型
function Person2(name)  {  
    this.name = name;  
    return [1,2,3];  
}  
var a2= new Person2('张三');   //新建了一个Object 对象,它有一个name 属性,并且返回一个字符串test 
var b2 = Person2('李四');    // 函数Test()属于Function对象,返回"test"字符串,所以test2单纯是一个字符串  
console.log(a2)//[1,2,3]
console.log(b2)//[1,2,3]
console.log(a2==b2)//false

还是分两种情况:

上一篇下一篇

猜你喜欢

热点阅读