• 关于function中存在return语句时,使用new关键字的问题


      现在流行创建对象的时候不使用new关键字,即使用function中return的形式返回对象。这样消除了忘记使用new关键字而造成的调试错误的隐患。

    1 function testObject(){
    2   this.a = "hello";
    3   this.b = {abc:"hello",cba:"olleh"};
    4   return b;
    5 }
    6 
    7 var test001 = testObject();

      从而能使用 var test01 = testObject()获得返回的对象。但是有一个疑问,带有return的function继续使用new关键字,会有什么样的结果呢?

     1 function testObject(){
     2   this.a = "hello";
     3   this.b = {abc:"hello",cba:"olleh"};
     4   return b;
     5 }
     6 
     7 var test001 = testObject();
     8 var test002 = new testObject();
     9 console.log(test001);
    10 console.log(test002);

    结果:  { abc: 'hello', cba: 'olleh' }
         { abc: 'hello', cba: 'olleh' }

    为什么使用了new关键字和不使用new关键字的结果不一样呢?再继续做一个实验:

     1 function testObject(){
     2   this.a = "hello";
     3   this.b = {abc:"hello",cba:"olleh"};
     4   return a;
     5 }
     6 
     7 var test001 = testObject();
     8 var test002 = new testObject();
     9 console.log(test001);
    10 console.log(test002);

    结果: hello
        { a: 'hello', b: { abc: 'hello', cba: 'olleh' } }

    当使用非对象的变量a当作返回值时,使用new关键字返回的是this指针。

    经过查证如果函数有返回值,但是返回值是基本类型。那么new出来的this还是object.因为基本类型的prototype还是Object. 而如果不使用new,那么返回值就是你return的值”

  • 相关阅读:
    【原创】ZYNQ学习笔记(一) HelloWorld实现
    设置毛玻璃效果
    什么是UIImageView
    短信监听器
    内容观察者
    插入联系人
    UIFont
    什么是UILabel
    读取联系人案例
    利用内容提供者插入短信
  • 原文地址:https://www.cnblogs.com/wenlonghor/p/3405430.html
Copyright © 2020-2023  润新知