【问题标题】:why object's property is undefind?为什么对象的属性未定义?
【发布时间】:2020-04-14 19:27:00
【问题描述】:

我想要的是,如果我没有使用 new 关键字调用对象,那么不要执行此行

this.price = price

我创建了构造函数并创建了属性price 我创建了对象 prod1。我使用 new 关键字调用它。 我预计输出是 200,但它是 undefined。 我想当我使用new关键字调用控制台200中的对象print时,就是price属性的值。

let Prodcut = function(price) {
    if (!new.target)
        throw this.price = price;
};

let prod1 = new Prodcut("200");
console.log(prod1.price);

注意:

  1. 我在视频中看到了 [https://www.youtube.com/watch?v=f5wGZiYVfjk&list=PL7pEw9n3GkoW0ceMeoycg9D00YjPAbtvt&index=2&t=190s]
  2. 当我移动时
this.price = price 

到下一行 "'throw' 和它的表达式之间不允许换行"

【问题讨论】:

  • 为什么会这样?
  • 将this.price = price移动到下一行?
  • @DaveNewton 因为我使用了新关键字
  • @adiga 它说“'throw' 和它的表达式之间不允许换行”
  • 你需要抛出一个错误。比如:if (!new.target) throw "error message"; this.price = price;

标签: javascript oop object constructor properties


【解决方案1】:

由于您需要检查是否使用关键字new 调用了构造函数,因此我认为条件应该改变。因为如果在没有它的情况下调用构造函数,则您正在放置该属性。你可以试试这个

let Prodcut = function(price) {
    if (new.target)
        this.price = price;
};

let prod1 = new Prodcut("200");
console.log(prod1.price);

【讨论】:

  • 这是一个很好的解决方案,但我在视频中看到了代码并试图像视频一样做
  • 另外,不要从视频或互联网中获取所有信息。并非所有视频都享有盛誉。有些是有错误或提示的。由于视频的性质,并非所有错误都得到修复。也就是说,您提出问题并自己复制代码很好。不过,最重要的是学习理解代码、排除故障,找到实现相同最终目标的替代方法也很好。
  • @SherylHohman 我知道我不必从视频中获取所有内容,但我很困惑为什么输出不一样
猜你喜欢
  • 2021-11-10
  • 2012-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-05
  • 2013-01-05
  • 1970-01-01
相关资源
最近更新 更多