There is one subtle difference between Array.of()
and Array()
/ []
constructor. Normally just like Array()
, the this
in Array.of()
will be the Array
object and it will use the Array.constructor
which is function Array()
to construct it's result.
However Array.of
can behave differently by changing it's bound context. If the bound context can be used as a constructor (if the bound object is a function) it will use that function to construct. So let's bind the Array.of()
to a function and see what happens.
function Test(n){console.log(n)}
Test.prototype.last = function(){return this[this.length-1]};
var what = Array.of.call(Test, [5,6,7], {a:0,b:1}, 42, null, "this is last");
console.log(JSON.stringify(what,null,2));
console.log(what.last());
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…