【问题标题】:Is "new" keyword mandatory in javascript? [duplicate]javascript中的“new”关键字是强制性的吗? [复制]
【发布时间】:2020-02-13 07:45:18
【问题描述】:

我在某处听说 new 关键字并非到处都是强制性的。这是真的吗?

app.post('/tasks', (req, res) => {
    const task = new Task(req.body)

如果我不写新的,它仍然有效。 我对这个关键字感到困惑

validate(value) {
            if(value.toLowerCase().includes('password')) {
                throw new Error(`Password can't be "password"`)
            }
        }
const add = (a, b) => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(a + b)
        }, 2000)
    })
}

再次在这里,如果我不提供新的,它不起作用。 有人可以详细说明区别吗?

【问题讨论】:

  • 你可以在这里查看:stackoverflow.com/questions/1646698/…
  • 这能回答你的问题吗? What is the 'new' keyword in JavaScript?
  • 不错的副本 :-(
  • 只有在函数支持的情况下才能省略new。你也可以自己创建这样的函数:jsfiddle.net/50w6Lvru
  • 通常在调用构造函数或类以创建构造函数/类的实例时使用new。一些(尤其是)宿主对象可以在没有new 运算符的情况下调用,当它们可能返回不同的结果时,例如。 Date]() 在没有new 的情况下调用时返回一个字符串。一些库有构造函数,它们检测到它们被new 调用,如果没有使用,它们会用new 运算符调用自己,从而强制创建一个新实例。

标签: javascript keyword


【解决方案1】:

new 关键字 has a number of effects 使用时。

通常,常规函数设计为在没有它的情况下使用。

通常,构造函数被设计为与它一起使用。

有时,一个函数可能被设计成可以在有或没有它的情况下工作。

例如:

function Duck() {
    if (this instanceof Duck) {
        return this;
    }
    return new Duck();
}

const swedish_blue = Duck();
const welsh_harlequin = new Duck();

console.log(swedish_blue instanceof Duck);
console.log(welsh_harlequin instanceof Duck);

如果它被设计为使用或不使用new,那么它可能会像上面的示例一样简单地应用new 本身。它也可能有不同的行为。

const date_string = Date();
const date_obj = new Date();
console.log(typeof date_string, date_string instanceof Date);
console.log(typeof date_obj, date_obj instanceof Date);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 2019-11-24
    相关资源
    最近更新 更多