gpt4 book ai didi

javascript - 这是对数组进行子类化的棘手解决方案吗?

转载 作者:行者123 更新时间:2023-11-30 13:07:57 24 4
gpt4 key购买 nike

今天我正在开发一个新的 SVG 框架,我尝试对数组进行子类化以使用节点...几个小时后我完成了这段代码(我只在 Safari 上测试过):

customArray=function(){
// Do the thing
this.__proto__= Array.prototype;

// Add some prototypes to the main customArray
this.f1=function(){console.log(1)}; // f1 custom function
this.f2=function(){console.log(2)}; // f2 custom function
};

newCustomArray=new customArray();
newCustomArray.f3=function(){console.log(3)} // f3 function only for newCustomArray

console.log(newCustomArray instanceof Array); // true
console.log([] instanceof Array); // true
console.log("---------------------");
console.log(newCustomArray.f1); // function(){console.log(1)};
console.log(newCustomArray.f2); // function(){console.log(2)};
console.log(newCustomArray.f3); // function(){console.log(3)};
console.log([].f1); // undefined
console.log([].f2); // undefined
console.log([].f3); // undefined
console.log("---------------------");
console.log(newCustomArray.forEach); // Native function
console.log([].forEach); // Native function

对我来说是有效的,但正如“系统”所说,proto 并非无处不在。

最佳答案

不,您不希望 CustomArray 构造函数是一个数组(具有数组方法)。相关的是:

newCustomArray instanceof Array; // false, should be true
newCustomArray.forEach; // undefined, should be [].forEach

继续阅读 How ECMAScript 5 still does not allow to subclass an array .上面的两个属性都很容易实现,但实际问题是 length 属性(它也不适用于您的 newCustomArray)。

关于javascript - 这是对数组进行子类化的棘手解决方案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14970887/

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