Аз имам този код с функция, в която аз се опитвам да дефинирам array
след това на следващата линия, която се притиска към него:
function Spot(value) {
this.x = null;
this.y = null;
this.values = [];
this.values.push(value);
}
Опитах това:
this.values = [].push(value);
и
this.values = (this.values || []).push(value);
Но не успя. Има ли нещо нередно с кода .....
Отговори:
2 за отговор № 1Липсва синтаксисът на инициализацията на масива:
var x = [ 1, 2, 3 ];
във вашия случай това би било:
this.values = [ value ];
Повече информация тук: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array
Кодът:
var x = ([]).push("y");
изглежда, че трябва да генерира масив и да придвижи стойността към нея. Той създава масив, но масивът не се връща x
, новата дължина на масива се връща, т.е. 1
.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push
Методът push () добавя един или повече елементи към края на масива и връща новата дължина на масива, [акцентът ми]
2 за отговор № 2
Просто вземете стойността в масив.
function Spot(value) {
this.x = null;
this.y = null;
this.values = [value];
}
var point = new Spot("foo")
console.log(point);
1 за отговор № 3
Начинът, по който създавате масива и бутате value
това е правилно. Но тъй като тя е създадена във функцията, която трябва да имате достъп this
обект извън функцията по някакъв начин.
Тъй като не върнете нищо, можете да го наречете като конструктор.
var spot = new Spot()
function Spot(value) {
this.x = null;
this.y = null;
this.values = [];
this.values.push(value);
}
var spot = new Spot();
Ако не искате да го наричате конструктор, можете просто да се върнете this
обект.
function Spot(value) {
this.x = null;
this.y = null;
this.values = [];
this.values.push(value);
return this;
}