Javascript构造函数返回此

时间:2015-12-09 21:59:11

标签: javascript

我习惯了像这样的javascript对象构造函数

function person(first, last) {
   this.firstName = first;
   this.lastName = last;
}

var dude = new person("the", "dude");

但有时我看到构造函数返回“this”,就像这样

function person(first, last) {
   this.firstName = first;
   this.lastName = last;
   return this;
}

最后回复this会怎样?

3 个答案:

答案 0 :(得分:2)

从构造函数返回this没有意义,但您可以返回任何您想要的对象。如果没有显式返回任何对象,则隐式返回this

可能的用例是:



function person(first, last) {
  if(!(this instanceof person)) {
    return new person(first, last);
  }
  this.first = first;
  this.last = last;
}

var person1 = new person('first', 'person');
var person2 = person('second', 'person'); // <- without "new"

console.log(person1, person2);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

我所知道的唯一一个案例就是如果你以下面的方式实例化你的对象;

person.call(Object.create(person.prototype), 'Jack', 'Brown');

以上示例要求您返回this;

可以做但应该避免的是返回与this

不同的对象
function person(first, last) {
    return {first: first, last: last};
}
(new Person() ) instanceof Person // false

答案 2 :(得分:0)

返回

this,以便调用者可以将调用链接在一起。

console.log(new person('First', 'Last').firstName);