今天上了一個新的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__'是非標準的,所以它取決於其環境需要支持。 – 2013-02-20 01:49:07
非常感謝很多 – microbians 2013-02-20 01:53:01
由於通過'new'創建的對象只是一個普通對象(即Object的實例),因此不能「子類化」Array,只有真實數組才具有特殊的自我調整長度屬性。簡單地將一個對象的[[Prototype]]設置爲'Array.prototype'只會讓你獲得方法。 – RobG 2013-02-20 03:06:27