JavaScript 构造函数的返回值
■知识点
构造函数允许使用return语句。如果返回值为简单值,则将被忽略,直接返回this指代的实例对象;如果返回值为对象,则将覆盖this指代的实例,返回return后面跟随的对象。
为什么会出现这种情况呢?这与new命令解析过程有关系,使用new命令调用函数的解析过程
如下。
第1步,当使用new命令调用函数时,先创建一个空对象,作为实例返回。
第2步,设置实例的原型,指向构造函数的prototype属性。
第3步,设置构造函数体内的this值,让它指向实例。
第4步,开始执行构造函数内部的代码。
第5步,如果构造函数内部有return语句,而且return后面跟着一个对象,会返回return语句指定的对象;否则会忽略return返回值,直接返回this对象。
■实例设计
下面的示例在构造函数内部定义return返回一个对象直接量,当使用new命令调用构造函数时,返回的不是this指代的实例,而是这个对象直接量,因此当读取x和y属性值时,与预期的结果是不同的。
function Point(x,y) //构造函数
this.x = x; //私有属性
this.y = y; //私有属性
return { x : true, y : false }
}
var pi = new Point(100,200); //实例化对象1
console.log(pi.x); //true
console.log(pi.y); //false
点击加载更多评论>>