欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

探究JS 加new 情况下 不使用return 和使用return 的情况(本文已弃,错误太多,不修改了。不删)

程序员文章站 2024-03-12 15:46:08
...

最近在研究这个new 和 return 返回的情况。
先上代码:首先是 不加 return 直接使用new 看看能不能获取该function里面的对象。

function Student(name, age, gender) {
        var name1 = name;
        var age = age;
        var gender = gender;
        }
    var stu1 = new Student("哈哈",'23岁',"未知");
    document.write(typeof stu1)
    console.log(stu1)

输入结果如下:
探究JS 加new 情况下 不使用return 和使用return 的情况(本文已弃,错误太多,不修改了。不删)

可以看出 stu1 是一个object 对象,也就是关于函数Student 新生成的对象实例。但是并不能取得里面的name1 age gender对象的值。那么该如何取得里面的对象的值呢?这里我们使用this指向。代码如下:

function Student(name, age, gender) {
        this.name1 = name;
        this.age = age;
        this.gender = gender;

    }
    var stu1 =new Student("哈哈",'23岁',"未知");
    document.write(typeof stu1)
    console.log(stu1)

探究JS 加new 情况下 不使用return 和使用return 的情况(本文已弃,错误太多,不修改了。不删)
现在我们完美获得了函数里面的值,并且可以随意操作了。

接下来我们试着修改一下代码。去掉new 看看。

function Student(name, age, gender) {
        this.name1 = name;
        this.age = age;
        this.gender = gender;

    }
    var stu1 =Student("哈哈",'23岁',"未知");
    document.write(typeof stu1)
    console.log(stu1)

探究JS 加new 情况下 不使用return 和使用return 的情况(本文已弃,错误太多,不修改了。不删)

看到这里,我们明白了,JS里面加New 意味着对函数进行对象实例复制操作,并且是指向被复制的函数本身。以上结果皆为讨论 不加return 情况下的 加不加New的讨论:不加new是无法获取函数内部的对象的,加new 可以获取函数对象生成的实例本身。

接下来我们开始 加return的情况 讨论 加new不加new
先上代码:

首先不加new,我return 函数本身this

function Student(name, age, gender) {
        this.name1 = name;
        this.age = age;
        this.gender = gender;

        return this;
    }
    var stu1 = Student("哈哈",'23岁',"未知");
    document.write(typeof stu1)
    console.log(stu1)

输出stu1结果如下:
探究JS 加new 情况下 不使用return 和使用return 的情况(本文已弃,错误太多,不修改了。不删)

可以看出有return的情况下, stu1 不加new是指向 windows 本身,也就是说 并未指向 函数本身,虽然这种情况也能获得你想要的值,但是写法并不理想。如果加new将会指向函数本身,并且生成对象实例。现在加new看看:

function Student(name, age, gender) {
        this.name1 = name;
        this.age = age;
        this.gender = gender;

        return this;
    }
    var stu1 =new Student("哈哈",'23岁',"未知");
    document.write(typeof stu1)
    console.log(stu1)

如下图
探究JS 加new 情况下 不使用return 和使用return 的情况(本文已弃,错误太多,不修改了。不删)

到了这里,我也就明白了。

不加return的情况下,要想获得函数的值,必须加new,并且函数内部的值最好用this指向自己。

加return的情况下:

(1)、无论加不加new,都能返回数据类型。主要看return的对象。
只有return this对象的时候,下面一定要加new。

(2)、不加new,不用this指向,也可以返回值。

function Student(name, age, gender) {
        var name1 = name;
        var age = age;
        var gender = gender;

        var arr =[name1,age,gender]
        return arr;
    }
    var stu1 = Student("哈哈",'23岁',"未知");
    document.write(typeof stu1)
    console.log(stu1)

结果如图:
探究JS 加new 情况下 不使用return 和使用return 的情况(本文已弃,错误太多,不修改了。不删)
但是返回的是数组,并不是清晰的对象实例。用this的话 返回完整的对象实例。结果在上面,可以去重新看一遍。

综上所述,我觉得最好都加new,为了不必要的麻烦。

以上都是自己研究所得,并不是最终正确理论。如果有任何错误的地方,求大神指导错误,谢谢。