Можно ли изменить значение this
? Не по назначению, вы не можете присвоить значение this
Ваш случай:
Array.prototype.foo = function() {
this.splice(0, this.length);
return this.concat([1,2,3]);
}
Но я не могу этого сделать:
Array.prototype.foo = function() {
return this = [1,2,3];
}
Когда вы модифицируете метод добавления прототипа foo()
, первая часть делает массив пустым, равным переназначению его экземпляра.
Например, к var a = []
Затем в возвращаемом значении:
return this.concat([1,2,3]);
Помните, что concat
не уничтожает массив, он создает новый массив и возвращает его
Учитывая a = ['x']
и b = ['y']
, c = a.concat(b)
приводит к c = ['x','y']
, а a
и b
остаются такими же, как они были
Теперь, так как вы делаете это внутри массива
a=['a','b','c']
затем вы позвоните a.foo();
, внутри a
станет равным a=[]
, с this.splice(0, this.length);
, затем объединится [ ]
с [1,2,3]
Так что, если я скажу просто a.foo()
, на самом деле ничего не произойдет снаружи, если я не назначу результат чему-либо, просто останется пустым.
Если a
назначено что-то
c = a.foo()
, тогда c
будет [1,2,3]
, а a
все еще пусто [ ]
Во второй части this = [1,2,3]
Возможно изменить значение этого ?, не присваивая, вы не можете присвоить значение этому