我需要的是一个自定义函数来充当本机Array对象。当我创建一个对象时,它应该像new Array(1,2,3,4)
一样。它应该创建一个元素数组。
<script type="text/javascript">
function MyArray(){
}
MyArray.prototype=Array.prototype;
var collection = new MyArray(1, 2, 3, 4);
console.log(collection);
// My code should act like.
var coll= new Array(1,2,3,4);
console.log(coll);
</script>
答案 0 :(得分:3)
您可以通过检查构造函数中的参数来初始化MyArray
实例,并在适用的情况下推送它们。您可能会问自己是否真的需要一个自定义MyArray
构造函数来模仿Array
。当您需要自定义方法时,扩展Array.prototype
可能是更好的选择。随附的片段也证明了这一点。
function MyArray() {
if (arguments.length) {
[].push.apply(this, arguments);
}
}
MyArray.prototype = new Array;
var resultdiv = document.querySelector('#result');
// create new instance of MyArray
var foo = new MyArray(1, 2, 3, 4, 5, 6);
// downside: you can't do this
foo[foo.length] = 7;
// use MyArray for reporting
var report = new MyArray('<code>foo length: ',
foo.length,
', foo: [',
foo,
']<br><b>@abforce</b>: ',
'foo.hasOwnProperty(\'length\') => ',
foo.hasOwnProperty('length'),
'</code>');
resultdiv.innerHTML = report.join('');
// alternative: adding custom methods to Array.prototype
Array.prototype.lastItem = function () {
return this[this.length-1];
};
var bar = [1,2,3,4,5,6];
// now you can
bar[bar.length] = 7;
resultdiv.innerHTML += ['<br><code>bar last item: ',
bar.lastItem(),
'</code>'].join('');
<div id="result"></div>
答案 1 :(得分:0)
您可以在构造函数
中返回数组的实例function MyArray(){
return new Array();
}
请注意,在这种情况下,因为构造函数显式返回一个对象,因此隐式返回 this will be ignored。
但在这种情况下,返回的对象不跟随MyArray.prototype
,它将链接到Array.prototype
。
答案 2 :(得分:0)
它的工作。
function MyArray() {
var arr = [ ];
arr.push.apply(arr, arguments);
arr.__proto__ = MyArray.prototype;
return arr;
}
MyArray.prototype = new Array;
// Add custom functions here to MyArray.prototype.
MyArray.prototype.last = function() {
return this[this.length - 1];
};
var sub = new MyArray(1, 2, 3);
console.log(sub);
</script>