探究JS 加new 情况下 不使用return 和使用return 的情况(本文已弃,错误太多,不修改了。不删)
最近在研究这个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)
输入结果如下:
可以看出 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)
现在我们完美获得了函数里面的值,并且可以随意操作了。
接下来我们试着修改一下代码。去掉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 情况下的 加不加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结果如下:
可以看出有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)
如下图
到了这里,我也就明白了。
不加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)
结果如图:
但是返回的是数组,并不是清晰的对象实例。用this的话 返回完整的对象实例。结果在上面,可以去重新看一遍。
综上所述,我觉得最好都加new,为了不必要的麻烦。
以上都是自己研究所得,并不是最终正确理论。如果有任何错误的地方,求大神指导错误,谢谢。