Javascript JS new.target vs.instanceof

Javascript JS new.target vs.instanceof,javascript,new-operator,instanceof,Javascript,New Operator,Instanceof,因此,我对节点6.x中添加的new.targetboolean做了一些阅读。下面是上提供的new.target的一个简单示例 但是这读起来很像我现在使用下面的代码 var Foo = function (options) { if (!(this instanceof Foo)) { return new Foo(options); } // do stuff here } 我的问题是:new.target对方法实例有什么好处吗?我并不认为这两个问题更清楚new.targ

因此,我对节点6.x中添加的
new.target
boolean做了一些阅读。下面是上提供的
new.target
的一个简单示例

但是这读起来很像我现在使用下面的代码

var Foo = function (options) {
  if (!(this instanceof Foo)) {
    return new Foo(options);
  }

  // do stuff here
}
我的问题是:
new.target
对方法实例有什么好处吗?我并不认为这两个问题更清楚
new.target
可能是一个更容易阅读的scosche,但这只是因为它少了一组参数
()


谁能提供我所缺少的见解?谢谢

使用此Foo实例您将检查此实例是否为Foo,但无法确保已使用new调用该实例。 我可以做这样的事

var foo = new Foo("Test");
var notAFoo = Foo.call(foo, "AnotherWord"); 
而且很好用。使用new.target可以避免此问题。
我建议您阅读这本书

您可以在任何实例上调用构造函数,但您可以在不使用
new
new的情况下调用它。target
不是布尔值!请参阅以获取更多解释。感谢您的澄清,Bergie甚至更好:
foo.constructor(“另一个词”)
@Bergi您确定您的这种方法有效吗?对象不能像这样访问构造函数,但只有原型可以。我的意思是,如果‘foo’是原型,那么只有你提到的代码才会work@Sumer是的,它会起作用,
foo
对象继承自原型,因此您可以访问它的
.constructor
属性。
var foo = new Foo("Test");
var notAFoo = Foo.call(foo, "AnotherWord");