JavaScript new return 类的实例化

new初始化方法

简单没有return的就不写了

复制代码
    function Person() {
         this.name="hongda";
         this.age=28;
          return "fffffff";
        }
        var p = new Person();
        console.dir(p);
        console.log(typeof p);
        var pp=Person();
        console.log(pp);
        console.log(typeof pp);
复制代码

复制代码
     function Person() {
         this.name="hongda";
         this.age=28;
          return new String("fffff");
        }
        var p = new Person();
        console.dir(p);
        console.log(typeof p);
        var pp=Person();
        console.log(pp);
        console.log(typeof pp);
复制代码

从上面可以发现,如果返回的类型是object时,那么构造函数初始化返回的就是return返回的object

如果return返回的不是object时,那么就返回函数内部初始化的。

 function中有prototype情况

复制代码
 function Person() {
         this.name="hongda";
         this.age=28;
         return "fffff";
        }
        Person.prototype={
          school:"nanjing",
          say:function(){}
        }
        
        var p = new Person();
        console.dir(p);
        console.log(typeof p);
        var pp=Person();
        console.log(pp);
        console.log(typeof pp);
复制代码

复制代码
function Person() {
         this.name="hongda";
         this.age=28;
         return new String("ffffff");
        }
        Person.prototype={
          school:"nanjing",
          say:function(){}
        }
        
        var p = new Person();
        console.dir(p);
        console.log(typeof p);
        var pp=Person();
        console.log(pp);
        console.log(typeof pp);
复制代码

可以发现如果初始化返回的就是return返回的对象时,该初始化对象并不能获取prototype

反之就可以获取prototype.

特殊情况: 

Function:

复制代码
 function Fun(){
 this.a="a";
 this.b="b";
 }
function Person() {
   this.name="hongda";
   this.age=28;
    return Fun;
  }
  Person.prototype={
    school:"nanjing",
    say:function(){}
  }
  var p = new Person();
  console.dir(p);
  console.log(p.toString());
  console.log(typeof p);
  var pp=Person();
  console.log(pp);
  console.log(typeof pp);
复制代码

复制代码
function Person() {
   this.name="hongda";
   this.age=28;
    return new Function("var a='a';var b='b';");
  }
  Person.prototype={
    school:"nanjing",
    say:function(){}
  }
  var p = new Person();
  console.dir(p);
  console.log(p.toString());
  console.log(typeof p);
  var pp=Person();
  console.log(pp);
  console.log(typeof pp);
复制代码

Date:

复制代码
function Person() {
   this.name="hongda";
   this.age=28;
    return new Date(22222222222222);
  }
  Person.prototype={
    school:"nanjing",
    say:function(){}
  }
  var p = new Person();
  console.dir(p);
  console.log(p.toString());
  console.log(typeof p);
  var pp=Person();
  console.log(pp);
  console.log(typeof pp);
复制代码

Object:

复制代码
 function Fun(){
 this.a="a";
 this.b="b";
 }
function Person() {
   this.name="hongda";
   this.age=28;
    return new Fun();
  }
  Person.prototype={
    school:"nanjing",
    say:function(){}
  }
  var p = new Person();
  console.dir(p);
  console.log(p.toString());
  console.log(typeof p);
  var pp=Person();
  console.log(pp);
  console.log(typeof pp);
复制代码

Boolean:

复制代码
function Person() {
   this.name="hongda";
   this.age=28;
    return true;
  }
  Person.prototype={
    school:"nanjing",
    say:function(){}
  }
  var p = new Person();
  console.dir(p);
  console.log(p.toString());
  console.log(typeof p);
  var pp=Person();
  console.log(pp);
  console.log(typeof pp);
复制代码

复制代码
function Person() {
   this.name="hongda";
   this.age=28;
    return new Boolean(true);
  }
  Person.prototype={
    school:"nanjing",
    say:function(){}
  }
  var p = new Person();
  console.dir(p);
  console.log(p.toString());
  console.log(typeof p);
  var pp=Person();
  console.log(pp);
  console.log(typeof pp);
复制代码

Array:

复制代码
 var arr=new Array(5);
 for(var i=0;i<5;i++){
  arr[i]=i;
 }
function Person() {
   this.name="hongda";
   this.age=28;
    return arr;
  }
  Person.prototype={
    school:"nanjing",
    say:function(){}
  }
  var p = new Person();
  console.dir(p);
  console.log(p.toString());
  console.log(typeof p);
  var pp=Person();
  console.log(pp);
  console.log(typeof pp);
复制代码

复制代码
function Person() {
   this.name="hongda";
   this.age=28;
    return [1,2,3,4,5];
  }
  Person.prototype={
    school:"nanjing",
    say:function(){}
  }
  var p = new Person();
  console.dir(p);
  console.log(p.toString());
  console.log(typeof p);
  var pp=Person();
  console.log(pp);
  console.log(typeof pp);
复制代码

 

 

还有一些特殊的情况

复制代码
 var arr=new Array(5);
 for(var i=0;i<5;i++){
  arr[i]=i;
 }
 console.log(typeof arr);
 
 var list=[1,2,3,4,5];
 console.log(typeof list);
 
  var re = new RegExp("d(b+)(d)","ig");
  console.log(typeof re);
  
  var reg=/a\w+/g;
  console.log(typeof reg);
复制代码

全部都是object

var fun=function(){}
console.log(typeof fun);
var fun2=new Function("var a='hong';var b=24;");
console.log(fun2);
console.log(typeof fun2);

结论:返回的是Object类型或者function类型的,那么就返回return返回的,反之则返回实例化对象,同样适用于Boolean.

 

posted @   hongdada  阅读(1409)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示