js new 函数名 和 函数名()调用函数的区别

若不使用new 函数名 方式调用函数,则就是普通的函数调用;若函数中没有返回值,则普通的函数调用将毫无意义;

        简要事例如下:

               var person = new Person();                    // person的值为一个对象

               但是: 

               var person = Person ();                              // 若Person函数无返回值,则person的值为undefined

       具体事例如下:

函数没有用return返回信息       

【事例一】

              

function Person (name, age) {
   this.name = name;
   this.age = age;
   this.sayName = function () {
      this.alert(this.name);
    }
}

// 此时为构造函数,产生的person对象是由解析器产生的
 var person = new Person(lily, 22);
 var person1 = Person(lucy, 24);
 person.sayName();     //  此时会弹出弹框lily
 person1.sayName();    // person1的值为undefined(因为函数本身没有return语句),故此时将会报错
                          此时的sayName是由window调用的;
 修改如下:
 window.sayName();      // lucy
 sayName可用window调用的原因:当Person(lucy, 24)执行时,该方法的对象变成了window。this指向了 
  window;故可以用window对象调用该方法

   函数用return返回了信息:

    如果函数返回的是基本数据类型(Number、string,Boolean等)时,new函数将返回一个该函数的实例对象;

    而如果函数返回一个引用类型(Object, array, function)时,new函数与直接嗲用函数产生的结果相同

  事例二:(返回基本数据类型)

function Test () {
  this.name = 'test'
  return 'test'
}

var test = new Test();      //test为object对象,该对象包含一个name属性和返回了一个test
var test1 = Test();         //Test()属于一个fuction对象,它只返回了一个字符串test,故test1为 
                              test字符串

 事例三:(返回引用数据类型)

 function Person(name,age) 
    { 
        var o = new Object(); 
        o.name = name; 
        o.age = age; 
        o.getName = function() 
        { 
            alert(this.name); 
        } 
        return o; 
    } 
    var obj1 = new Person("liwen",25); 
    var obj2 = Person("liwen1",25); 
    obj1.getName();  //liwen*/        new一个函数的实例对象  
    obj2.getName();  //liwen1*/      直接调用  


//这里new一个函数的对象和直接调用函数产生的结果相同

总结:

构造函数不需要显示返回值。

          使用new创建对象(调用构造函数)时,若return的是基本数据类型回忽略返回值;

                                                                            若return 的是对象,则返回该对象;

javascript中new对象的过程

  如:    var myObj = newPerson(“aty”,25);

1.创建一个空的Object对象.var myObj = new Object();

2.将构造函数Person中this指向刚创建的myObj对象

3.将创建的myObj的__proto__指向构造函数Person的prototype。[这一步是建立对象和原型直接的对应关系。firefox下通过

                           对象的__proto__属性能够访问到原型,IE下则没有暴露出相应的属性。]

4.执行构造函数Person()中的代码

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值