【问题标题】:How to initialize an array with two empty objects in Javascript如何在Javascript中用两个空对象初始化数组
【发布时间】:2015-11-13 00:26:37
【问题描述】:

我正在制作一个角度控制器,需要用两个空对象初始化一个数组,以便屏幕上出现两条线,当单击 + 按钮时,我需要在数组中初始化一个新对象。我不确定如何去做。

这是我最好的尝试:

var myApp = angular.module('myApp', []);

myApp.controller('myController', ['$scope', '$q', function($scope, $q) {

    $scope.arr = [card('',''),card('','')];
    $scope.addLine = function(index){
        $scope.arr.push(card('',''));
    }
    $scope.removeLine = function(index){
        $scope.arr.splice(index, 1);
    }
}]);

function card(term, definition){
    this.term = term;
    this.definition = definition;
}

【问题讨论】:

  • [new card('',''), new card('','')]

标签: javascript arrays angularjs


【解决方案1】:

您需要使用关键字new 来创建card 的实例:

$scope.arr = [new card('',''), new card('','')];
//            ^                ^ See new keyword  
$scope.addLine = function(index){
    $scope.arr.push(new card('',''));
    //              ^ See new keyword
}

您还应该考虑始终将您的构造函数大写(这样您就可以表明它是一个构造函数:

new Card('', '');
function Card(...) {...}

您还可以通过检查instanceof 来消除new 关键字的需求:

// No need for new anymore:
var card = Card(1, 2, 3); 
console.log(card instanceof Card); // true
function Card(a, b, c) {
  if (!(this instanceof Card)) return new Card(a, b, c);
  this.a = a;
  this.b = b;
  // ...
}

【讨论】:

  • 很高兴知道。谢谢。
  • @Mardymar 很高兴我能帮上忙 :-) 因为 javascript 不能给你编译错误,所以最好有编码约定以尽量减少意外错误的数量。
【解决方案2】:
[new card('',''), new card('','')]

source

【讨论】:

  • 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
  • @L3viathan 是的。我不知道你还想要什么。
  • 请考虑编辑您的帖子,以添加更多关于您的代码的作用以及它为何能解决问题的说明。一个大部分只包含代码的答案(即使它正在工作)通常不会帮助 OP 理解他们的问题。
  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
  • @Drenmi 如果 OP 能够阅读这些单词,那么很清楚这个源 sn-p 如何回答 OP 的问题。很抱歉,我没有写一个冗长的答案,只是为了更容易翻阅“可疑简短答案”队列中的帖子并获得您的金牌。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-26
  • 2022-08-12
  • 2013-10-12
  • 2011-08-18
  • 2020-07-01
  • 2020-04-21
相关资源
最近更新 更多