【问题标题】:Create a new array inside of an instance. Javascript在实例内创建一个新数组。 Javascript
【发布时间】:2016-11-14 02:37:43
【问题描述】:

我试图创建一个构造函数,并在其中创建一个新数组,我正在一些方法中实现。
我的问题是在具有数组的构造函数中实现方法的适当方法是什么.

这是我的代码示例:

function Solution(){
    var queue = new Array();
}

var sol1 = new Solution();
console.log(sol1.queue);

当我访问数组时,它显示未定义。那么基本上我如何在构造函数之外使用该数组?

【问题讨论】:

  • this.queue = [];

标签: javascript arrays methods constructor instance


【解决方案1】:

有很多方法可以做同样的事情。这就是为什么 Javascript 被称为表达性语言的原因。

通过不同的方法创建相同的对象..

通过新创建

function Solution(){
   this.data = [];
}
var s = new Solution();
console.log(s.data);

或通过工厂函数

function createSolution(){
   return {   // return object literal
       data : [],
   };
}

var s = createSolution();
console.log(s.data);

或工厂功能略有变化

function createSolution(){
  obj = {};   // return object literal
  obj.data = []; // add property
  return obj;
}

var s = createSolution();
console.log(s.data);

或通过直接对象字面量

var s = { data:[]};
console.log(s.data);

或者使用类,或者定义为原型,不胜枚举。

您最好使用最简单的方法来降低代码复杂性,因此直接对象字面量是创建对象的最佳方法(如果您要创建同一对象的许多(1000 到数百万以上)实例定义一个例外)原型)

创建多个实例时使用以下形式。

function Solution(){
    this.data = [];
};
Solution.prototype = {
     data : null, // don't create the array here
}

console.log(new Solution().data); // array output

在原型中定义属性可以让 javascript 解释器/编译器不必考虑要添加到新对象和解析/编译/优化的内容,从而在您多次执行时节省 cpu 时间

【讨论】:

    【解决方案2】:
    function Solution() {
      this.queue = [];
    }
    

    几个笔记:

    1. var 是一个在函数外无法访问的变量。

    2. 在构造函数中,this 指的是对象本身。
      见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new:

    当代码 new Foo(...) 被执行时,会发生以下事情:

    1. 创建了一个新对象,继承自 Foo.prototype。

    2. 使用指定的参数调用构造函数 Foo, 并将this 绑定到新创建的对象。 new Foo 是等价的 到 new Foo(),即如果没有指定参数列表,则调用 Foo 没有论据。

    3. 构造函数返回的对象成为整个new表达式的结果。如果构造函数没有 显式返回一个对象,使用第一步创建的对象 反而。 (通常构造函数不返回值,但它们可以 如果他们想覆盖正常的对象创建,请选择这样做 过程。)

    【讨论】:

    • 感谢您的解释。这正是我需要知道的。我完全忘记了,如果我用var 声明一个变量,该变量是私有的。如果我用this 声明该变量可以访问其他函数。谢谢!
    • 很高兴为您提供帮助,欢迎来到 Stack Overflow。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受。
    【解决方案3】:

    您正在尝试定义一个实例属性,那么为什么要使用var 来声明一个局部变量?

    试试这个:

    function Solution(){
        this.queue = [];
    }
    

    这会将实例的queue 属性设置为一个新数组。请记住 JavaScript 没有类。您不声明变量,并希望它会神奇地出现在实例中。

    【讨论】:

    • 然而,在 ECMAScript 6 中,JavaScript 有 classes
    • @Chalk 没错,但是 ES6 中的类只是现有基于原型的语法的语法糖:它没有额外的功能。
    【解决方案4】:

    function Solution(){
      this.queue = new Array();
      //not var, this.
    }
    
    var sol1 = new Solution();
    console.log(sol1.queue);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-21
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多