gpt4 book ai didi

javascript - 原型(prototype)在类似数组的构造上丢失

转载 作者:行者123 更新时间:2023-12-02 14:53:30 25 4
gpt4 key购买 nike

我创建了一个类似数组的原型(prototype):

function METracker() {}
METracker.prototype = Object.create(Array.prototype);
METracker.prototype.myMethod = function(aStd) {
return true;
};

现在我创建一个实例:

var aInst = new METracker('a', 'b', 'c');

现在我想克隆它,所以我这样做:

var cloneInst = aInst.slice();

但是cloneInst不再具有方法.myMethod有没有办法将原型(prototype)保留在克隆上?

谢谢

最佳答案

如果您要创建自己的类似数组,技巧是扩展数组实例,而不是数组原型(prototype):

function MyAry() {
var self = [];

[].push.apply(self, arguments);

// some dark magic

var wrap = 'concat,fill,filter,map,slice';
wrap.split(',').forEach(function(m) {
var p = self[m];
self[m] = function() {
return MyAry.apply(null, p.apply(self, arguments));
}
});

// add your stuff here

self.myMethod = function() {
document.write('values=' + this.join() + '<br>');
};

return self;
}


a = new MyAry(11,44,33,22);
a.push(55);
a[10] = 99;
a.myMethod()

b = a.sort().slice(0, 4).reverse();
b.myMethod();

基本上,您创建一个新数组(普通数组,而不是您的对象),包装一些数组方法,以便它们返回您的对象而不是通用数组,然后将自定义方法添加到该实例。所有其他数组方法和索引操作都会继续作用于您的对象,因为它只是一个数组。

关于javascript - 原型(prototype)在类似数组的构造上丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36003740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com