Javascript ';新';与';应用';创建对象时

Javascript ';新';与';应用';创建对象时,javascript,knockout.js,ecmascript-6,Javascript,Knockout.js,Ecmascript 6,背景:我在Knockout工作,并且已经实现了一个。具体来说,我正在实现loadComponent和createViewModel方法,以实现依赖项注入。因此,基本上,我通过某种约定确定合适的构造函数,然后使用所需的依赖项对其调用new 我的问题是:当我有这个 function model(arg1, arg2) { this.foo = arg1; this.bar = arg2; } 以下两者之间的具体区别是什么: var instance = new model(arg1

背景:我在Knockout工作,并且已经实现了一个。具体来说,我正在实现
loadComponent
createViewModel
方法,以实现依赖项注入。因此,基本上,我通过某种约定确定合适的构造函数,然后使用所需的依赖项对其调用
new

我的问题是:当我有这个

function model(arg1, arg2) {
    this.foo = arg1;
    this.bar = arg2;
}
以下两者之间的具体区别是什么:

var instance = new model(arg1, arg2);
以及:

两者似乎都有相同的结果。至于我的具体用例,我想做如下事情:

var instance = {};
model.apply(new Proxy(instance, handler), [arg1, arg2]);
this.foo = 'bar';
其中,
handler
将转换如下内容:

var instance = {};
model.apply(new Proxy(instance, handler), [arg1, arg2]);
this.foo = 'bar';
进入:

…抽象出敲除的笨拙的可观察语法

  • 这是个糟糕的主意吗
  • 有更好/更简单的方法吗
  • 这样做而不是新建,有什么意义

  • 我不确定这些差异是否会影响您的用例,但是当您调用
    newmodel
    时肯定会发生一些额外的事情,而
    model.apply不会发生这种情况。请看。如果您依赖于
    model.apply({}…
    ),并且在某个时候出现了奇怪的行为,我一点也不会感到惊讶。一般来说,我建议避免使用聪明的代码。MattBrowne的链接提供了有关
    new
    行为的大量信息,您需要了解这些信息。感谢您的评论和链接。听起来,如果我不关心原型链(在本例中我不关心),我就没有什么可担心的。我不确定这些差异是否会影响您的用例,但当您调用
    新模型时肯定会发生一些额外的事情,而
    模型.apply
    不会发生。请看。如果您依赖于
    model.apply({}…
    ),并且在某个时候出现了奇怪的行为,我一点也不会感到惊讶。一般来说,我建议避免使用聪明的代码。MattBrowne的链接提供了有关
    new
    行为的大量信息,您需要了解这些信息。感谢您的评论和链接。听起来,如果我不关心原型链(在这种情况下我不关心),我就没有什么可担心的了。