【问题标题】:If Value is true, create a new instance of an object如果 Value 为 true,则创建一个对象的新实例
【发布时间】:2017-12-08 13:18:30
【问题描述】:

根据比较用户输入值与随机值的 if 语句结果创建对象的新实例。如果这是真的,我希望它创建一个对象的新实例,并且每次比较结果为真时都这样做。

object.create() 会是这样做的方法吗?

 var firstthing = new thing();

 function createnewthing()
 {
    var entry = document.getElementById('theirentry').value;
    if (oneobjectinaclass == "type1")
    var firstvalueinarray = type1[0];
    else if (oneobjectinaclass == "type2")
    var firstvalueinarray = type2[0]; 
    else if (oneobjectinaclass == "type3")
    var firstvalueinanarray = type[0];
    if (variableassignedtowhichevertype[1] == avaluetocompare)
    {
        numCorrect++;
        alert('You\'re right! ' + numCorrect); 

        //the code I'm trying to get to accomplish this goes here
        //var createanotherthingeachtimethisistrue = new Thing();

    }
    else {
        alert('Wrong!');
    }
}

【问题讨论】:

  • 您是否尝试运行您的代码?如果你这样做了,那没有用吗?你想要完成什么(除了创建一个对象)?
  • 它创建了 1 个对象。每次传递的值为真时,我都需要它创建一个新的。这运行了很多次。这只会创建createanotherthingeachtimethisistrue。该名称是一个占位符,用于解释它应该做什么。
  • 在这种情况下你能把它放在一个数组中吗?您的变量名称不能描述您真正想要完成的任务。创建一个新对象就像输入new Thing() 一样简单,但不清楚你是否尝试过这个,为什么在这种情况下这对你来说不是一个令人满意的行为?
  • 用你说的 for 循环创建一个数组?我可以像那样动态创建变量吗?变种 [i] ?每次用户输入一个值时,它都会通过此函数对其进行验证。我希望它在正确时创建一个新对象。本质上是重新启动要检查的东西。
  • 嗯,不。创建一个数组var arr = []; 并将项目添加到该数组arr.push(new Thing());。再说一次,我不确定这是否真的是你想要的。如果你想“重置一些项目”,那么你应该分配第一个变量,而不是创建一个新的局部变量。

标签: javascript class object instantiation


【解决方案1】:

你的问题出在 Scope 的概念上,在 JavaScript 中简单来说就是基于函数的。

因此,为了解决您的问题,您可以通过键入在当前范围之外分配一个变量

value = new Thing();

其中 value 是先前在当前函数之外的 some 函数上下文中创建的变量。


要深入挖掘,我们需要了解 JavaScript 中的作用域。有关更多详细信息,请参阅 Scope (computer science),有关此问题的更多信息,请参阅 Todd Motto 的 Everything you wanted to know about JavaScript scope 进行更详细的介绍。

简而言之;每当我们输入一个函数时,就会“创建”一个作用域,而每当我们创建或访问变量时,就会使用该作用域的环境框架。如果变量不可用,则使用外部上下文(或环境框架)。举个例子吧。

示例 1

var toy = 'stick';
function changeToy() {
   var toy = 'ball';
}
changeToy();

与示例 2 相比

var toy = 'stick';
function changeToy() {
   toy = 'ball';
}
changeToy();

在示例 1 中,将创建并分配一个新的 变量,因为环境框架是函数 changeToy 的本地变量。在示例 2 中,变量 toy 在changeToy 的环境框架中没有找到,因此使用了外部上下文(本例中为全局上下文);在其中找到变量并重新分配。

【讨论】:

    猜你喜欢
    • 2013-09-13
    • 1970-01-01
    • 2021-02-28
    • 2023-03-24
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    相关资源
    最近更新 更多