上面的例子我们定义了一个构造函数Foo,传入一个参数姓名,在构造函数内部将传入的name写入实例中,最后返回了一个对象{user: 'xu'}。那么问题来了,new Foo 按理说应该返回的是一个Foo实例,也就是说f.name是有的并且在案例中的值为'xu', 但是我们却得到了undefined,并且name in f 返回 false,表示f这个对象并没有name属性。而f.user却得到了'xu'。
大家可能猜到了,如果构造函数中返回了一个对象,那么这个构造函数在new的过程中会返回这个定义的对象,而并非返回这个构造函数的实例。那么,如果return的是一个数字或者string呢?
var Foo = function (name) { this.name = name; return 1; } var f = new Foo('xu') console.log(f) // {name: 'xu'}
以上案例我们可以看出,如果构造函数中return的是一个数字,那么new的这个构造函数会忽略,仍然返回正确的构造函数实例对象。不信你可以用instanceof来验证。
结尾以上就是此文章的内容,希望对读者有所帮助,如有错误请指正~~~