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

标签 javascript function object constructor new-operator

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

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

您以前可能见过这个:

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

我真的不知道如何用谷歌搜索这个,或者如何调用它。我很努力地想弄清楚这个问题应该有什么标题。

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

最佳答案

因为在Player函数中,它返回p对象。所以,如果你使用new操作符调用Player函数,它将是p对象,而不是默认创建的obj。当然,它也会一般情况下,调用 Player 时会返回 p 对象。但是,在 Car 函数中,它不会返回对象。因此,当您使用 new 运算符调用 Car 函数时,它将返回默认创建一个对象,通常调用 Car 函数时它会返回 undefined

您可以引用:

usage of new operator

关于javascript新对象构造函数替代正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45294566/

相关文章:

javascript - 动态浏览 map 时限制对 Flickr API 的调用

重新创建 diag() 函数

javascript - 正确使用 JS 库中的函数

html - 如何在 <object> Embed 上获得 height=100%

JavaScript:编写函数,将一个对象和一个函数数组作为输入参数并返回一个数组

javascript - 是否可以提示用户在任何 grunt 任务中输入?

javascript - 半透明标题在滚动时变得不透明

javascript - 从javascript中的搜索框获取值(value)

javascript - Angular/Socket.io/HTML/从 HTML 中的 &lt;script&gt; 内调用 Controller 的函数

javascript - 设置对象的单个属性