【问题标题】:javascript new object constructor function alternative proper?javascript新对象构造函数替代合适吗?
【发布时间】:2017-12-30 20:44:54
【问题描述】:

好的,我一直在阅读https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new 并且发现自己在类方案中编写了一堆对象构造代码。

为了保持向后兼容性,我很少使用“类”关键字/语法。

你可能以前见过这个:

function Car(make, model, year) {
    this.make = make;
    this.model = model;
    this.year = year;
}
//Usage: var carinstance = new Car("blah","blah","blah");

但我发现这非常适合我的使用(偶然发现):

function Player (name) {
    var p = {
        name : name,
        age : 18
    };
    return p;
}
//Usage: var person = new Player("Jon");

我知道它有效,因为我已经使用它了。 我只是不知道这是否合适。

例如,我可以使用相同的代码而没有“new”关键字(相同的结果):

var person = Player("Jon");

但我不能对第一个规范做同样的事情(在函数中使用'this'关键字):

var car = Car("blah","blah","blah"); //car == undefined

我真的不知道如何在 Google 上搜索它,也不知道如何称呼它。我很难弄清楚这个问题应该有什么标题。

我想一个更明确的方式来提出这个问题: 我得到的结果是否只是 javascript、浏览器引擎等的夸克?或者这是制作构造函数的可靠方法?

【问题讨论】:

  • 您的第一种方法使用构造函数,就像您使用 this 一样,您必须使用 newObject.create 来创建对象。在您的第二种方法中,您正在返回一个对象,但它不使用构造函数。当您开始使用 prototype 时,将会有 1 个主要区别。使用new 创建的对象将具有您定义的原型,而其他对象将只有默认原型
  • 是的,这是 this 在 JavaScript 中如何工作的夸克。不隶属于以下频道,但这些是了解这里发生的事情的绝佳资源! The new keyword .... "this & Object Prototypes"

标签: javascript function object constructor new-operator


【解决方案1】:

因为在Player函数中,它返回p对象。所以,如果你使用new操作符调用Player函数,它会是p对象而不是默认创建的obj。当然,一般调用Player时也会返回p对象。但是,在Car函数中,它并没有返回对象。因此,当你使用new操作符调用Car函数时,它会返回默认创建的对象,并在调用@987654333时返回undefined一般的@函数。

你可以参考:

usage of new operator

【讨论】:

    【解决方案2】:

    执行以下操作。

    function Car(make, model, year) {
        if ( !(this instanceof Car) )
          return new Car(make, model, year);
        this.make = make;
        this.model = model;
        this.year = year;
    }
    

    然后你可以不用new就可以调用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-08
      • 1970-01-01
      • 2019-11-02
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      相关资源
      最近更新 更多