So war ich umsah, als ich herausfand, dass ich so benannte Parameter machen könnte:Konstruktor mit benannten Parametern?
function boo({first = "one", second = "two"} = {}) {
console.log(first + second);
}
// and then calling it
boo({first = "two", second = "five"}); // logs "twofive"
boo({first = "two"}); // logs "twotwo"
boo({second = "five"}); // logs "onefive"
boo(); // logs "onetwo"
aber was Konstrukteuren, wie dieser?
function foo({x, y = "y", z = "z"} = {}) {
this.x = x;
this.y = y;
this.z = z;
}
var bar = new foo("x");
console.log(bar);
// up until now, it works!
var rows = ["a","b","c","d","e","f","g","h","i"];
var cols = ["a","b","c","d","e","f","g","h","i"];
var foos = {};
for(let i = 0; i < rows.length; i++) { // make rows
for(let j = 0; j < cols.length; j++) {
let counter = rows[i] + cols[j];
foos[counter] = new foo({x: counter});
}
}
// this doesn't work for some reason?
gibt Eigentlich mir den zweiten Abschnitt des Codes die folgenden Fehler in Chrom 49: Uncaught TypeError: foo is not a constructor
.
Ich meine, offenbar foo
ist ein Konstruktor, warum kann ich nur 81 Objekte mit unterschiedlichen Namen zu machen von foos
, alle sind Objekte enthält eine x
, y
und z
?
EDIT
Der obige Code scheint allright zu arbeiten, aber wenn ich versuche, es wie folgt aus, um größeren Code anzuwenden, es will einfach nicht hören:
$(function() {
function cell({
coords, building = "none", terrain = "soft", temperature = "25°C", humidity = "none", population = "0", money = "$0", income = "$0", production_amount = "0", production_type = "none", corruption_level = "0%", owner = "none"
} = {}) {
this.coords = coords;
this.building = building;
this.terrain = terrain;
this.temperature = temperature;
this.humidity = humidity;
this.population = population;
this.money = money;
this.income = income;
this.production_amount = production_amount;
this.production_type = production_type;
this.corruption_level = corruption_level;
this.owner = owner;
}
// var cella = new cell("aa");
//
// console.log(cella);
var rows = ["a", "b", "c", "d", "e", "f", "g", "h", "i"];
var cols = ["a", "b", "c", "d", "e", "f", "g", "h", "i"];
var cells = {};
for (let i = 0; i < rows.length; i++) { // make rows
for (let j = 0; j < cols.length; j++) {
let coords = rows[i] + cols[j];
let cell = "<div class=\"cell\" id=\"" + coords + "\"></div>";
$("main").append(cell);
cells[coords] = new cell({
coords: coords
});
}
}
$("div.cell").click(function() {
console.log(this.id);
});
});
body {
margin: 0;
}
main {
width: 100vw;
height: 100vh;
}
main div.cell {
width: calc(100vw/9);
height: calc(100vh/9);
background-color: #9E1023;
/*border: solid 1px black;*/
float: left;
}
main div.cell:hover {
background-color: #740B20;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Evalitia</title>
</head>
<body>
<main></main>
</body>
</html>
Ich glaube nicht, 'bar' ist, was Sie es nicht zu erwarten. Vielleicht wollten Sie 'new foo ({x:" x "})'? – Bergi
Sind Sie sicher, dass die Anrufe im ersten Codeblock korrekt sind? Ich bekomme einen Syntaxfehler, ich muss 'boo ({first:" two ", second:" five "}) schreiben; ' – Barmar
@Cory, ja, danke fürs Hinzeigen, Tippfehler –