为什么Javascript"typeerror"

Chu*_*ars 4 javascript

执行此操作可生成正确的结果,Chrome调试器表示没有例外:

var x = new Foo().bar().baz();
Run Code Online (Sandbox Code Playgroud)

但这会进入太空而永远不会完成,Chrome调试器虽然bar()执行正确,但它会抛出"typeerror"异常,并且在尝试调用baz()时永远不会到达指定的函数:

var x = new Foo();
x = x.bar().baz();
Run Code Online (Sandbox Code Playgroud)

在我看来,它们在功能上是相同的.他们为什么表现不同?

Rob*_*obG 5

似乎与Chrome调试器有关:

function Foo(){}

Foo.prototype.bar = function() {
  return this;
}

Foo.prototype.baz = function() {
  return 'baz';
}

var x = new Foo().bar().baz();
console.log(x); // baz
Run Code Online (Sandbox Code Playgroud)

正如预期的那样(Firefox,IE,Chrome).

编辑

并且:

var x = new Foo();
x = x.bar().baz()
console.log(x); // baz
Run Code Online (Sandbox Code Playgroud)

这两组代码在功能上是相同的.