javascript新对象构造函数替代正确吗?

时间:2017-07-25 05:26:25

标签: javascript function object constructor new-operator

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

为了保持向后兼容性,我没有多多使用'class'关键字/语法。

您之前可能已经看过:

system()

但我发现这对我的使用非常有效(偶然发现):

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

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

例如,我可以使用相同的代码w / o'new'关键字(相同的结果):

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

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

var person = Player("Jon");

我真的不知道如何谷歌这个,或者称之为什么。我很努力想弄清楚这个问题应该有什么标题。

我想这是一个更明确的方式来提出这个问题: 我得到的结果只是javascript,浏览器引擎等等吗?或者这是构建函数函数的可靠方法吗?

2 个答案:

答案 0 :(得分:1)

执行以下操作。

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

然后你可以在没有新的情况下调用它。

答案 1 :(得分:1)

因为在Player函数中,它返回p个对象。因此,如果您使用new运算符调用Player函数,它将是p对象,但不是默认创建的对象。当然,当您使用它时,它也将返回p对象一般情况下请致电Player。但是,在Car函数中,它不会返回一个对象。因此,当您使用new运算符调用Car函数时,它将返回默认创建的对象,它将返回{ {1}}通常会调用undefined函数。

你可以参考:

usage of new operator

相关问题