与new实例化的构造函数仍具有返回值

时间:2017-01-24 11:55:20

标签: javascript constructor

为什么javascript中的内置构造函数返回一个值而不是一个对象?它们是用new运算符调用的,它们仍然不返回一个对象。如何创建一个不返回像这样的对象的构造函数:

      new Number() //returns 0 instead of [Object object]
      new String() //returns "" 
      new Date() //returns today's date

      function SomeConstructor() {
      return "Value"
      }
      new SomeConstructor() // [Object object]
      SomeConstructor() // returns "Value"

如何创建这样的构造函数?

1 个答案:

答案 0 :(得分:0)

它们确实是对象,您可以查看typeof

要获取子类型,您可以使用Object.prototype.toString

正如@Michael Ritter指出:

  

它只是不打印为[Object object],因为它们实现了   toString()方法(返回用于的字符串表示形式)   印刷)

    console.log( typeof new Number()) //object
    console.log( typeof new String()) //object 
    console.log( typeof new Date()) //object
    
    console.log( Object.prototype.toString.call(new Number())) //[object Number]
    console.log( Object.prototype.toString.call(new String())) //[object String] 
    console.log( Object.prototype.toString.call(new Date())) //[object Date]

要回答第二个问题,只需返回对象形式而不是原始形式的任何内容。原因可能是found here

      function SomeConstructor() {
          return new String("Value");
      }
      console.log(new SomeConstructor(), new SomeConstructor().valueOf());