JS构造函数中的return
1function foo(name) {
2this.name = name;
3return name
4}
5 console.log(new foo('光何'))
6
7function bar(name) {
8this.name = name;函数prototype
9return ['光','何']
10}
11 console.log(new bar('光何'))
结果为:
1 'ooo {name: "光何"}'
2 'Array(4) ["光", "何"]'
创建JS对象两种⽅式
在JavaScript中,创建对象的⽅式包括两种:对象字⾯量和使⽤new表达式。对象字⾯量是⼀种灵活⽅便的书写⽅式,例如:
1var o = {
2 name : '光何'
3 }
new表达式是配合构造函数使⽤的:
1function O(name){
2this.name = name;
3}
4var o = new O('光何');
那么,在使⽤new操作符来调⽤⼀个构造函数的时候,发⽣了什么呢?其实很简单,就发⽣了四件事:
1var obj ={};
2 obj.__proto__ = CO.prototype;
3CO.call(obj);
4return obj;
第⼀⾏,创建⼀个空对象obj。
第⼆⾏,将这个空对象的proto成员指向了构造函数对象的prototype成员对象,这是最关键的⼀步。
第三⾏,将构造函数的作⽤域赋给新对象,因此CA函数中的this指向新对象obj,然后再调⽤CO函数。于是我们就给obj对象赋值了⼀个成员变量name,这个成员变量的值是"光何"。
第四⾏,返回新对象obj。这⼀步就是我们需要注意的地⽅,构造器中如果包含返回值。
构造函数
如果没有按照正确的⽅法书写构造函数的话,就像本⽂上⽂中出现的情况。就会造成⼀些难以估计的后果。
⼀个函数,要做为⼀个真正意义上的构造函数,要满⾜以下条件。
1、在函数内部对新对象(this)的属性进⾏设置,通常是添加属性和⽅法。
2、构造函数可以包含返回语句(不推荐),但返回值必须是this,或者其它⾮对象类型的值。
如上⽂中我们的构造函数中返回了参数name,如果参数是普通值(⾮引⽤类型),则不会发⽣什么影响,但是如果值是引⽤类型(如对象,数组等),则我们new 出来的对象就会被返回的引⽤类型值给替换了。
可以看出:在JavaScript构造函数中:如果return值类型,那么对构造函数没有影响,实例化对象返回空对象;如果return引⽤类型(数
组,函数,对象),那么实例化对象就会返回该引⽤类型;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论