javascript - 我可以将 javascript Prototype 添加到我的数组实例吗?

标签 javascript arrays prototype prototypal-inheritance

所以我了解到您可以向 javascript 对象原型(prototype)添加新方法。 myObject.prototype.myFunction = function {}。我想对我的数组实例做同样的事情,但不断出错。像这样的东西。

var myArray = [1,2,3,4,5,6,7,8,9,0]; 

myArray.prototype.bubbleSort = function(){

// sort stuff here. 

}

为什么不允许这样做?我认为既然数组继承自对象,你应该能够像对象一样扩展它们。

如果这不可能,我该如何添加一个 .符号函数调用我的数组,所以我可以说。 myArray.bubbleSort(); 而不是 bubbleSort(myArray); 而不向 Array.prototype 添加方法。


我认为我的问题引起了一些困惑,所以请在回答之前阅读本节。谢谢。

我的目标是创建一个名为 myArray 的数组,该数组具有特定的 bubbleSort 方法。我不想更改主要的 Array.Prototype。

所以以后我可以做这样的事情。 var yourArray = new myArray() 现在因为 yourArraymyArray 的实例,所以它可以访问 bubblesort 函数。

我们可以在不改变主 Array.prototype 的情况下实现这个吗?

最佳答案

数组也是对象,因此您可以轻松地将其作为函数添加到该数组:

var myArray = [1,2,3,4,5,6,7,8,9,0]; 
myArray.bubbleSort  = function(){console.log(this)}

请注意,如果您在库中执行此操作,您可能会像这样破坏代码:

for(var i in myArray){
    console.log(i)
}

因为这也会给 bubbleSort 属性

更好的方法是扩展一个数组来制作一个包装器:

function sortableArray(){
    return this
}

sortableArray.prototype = Object.create(Array.prototype);

sortableArray.prototype.bubbleSort = function(){
  console.log(this)
}

var arr = new sortableArray()
arr.push(1)
arr.push(0)
arr.push(9)
arr.bubbleSort();

关于javascript - 我可以将 javascript Prototype 添加到我的数组实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37752558/

相关文章:

javascript - 使用解析服务器和 Heroku 调度程序的后台作业

python - 如何在python中将数组转换为数组

javascript - 直接访问原型(prototype)的值,即 Object.prototype.toString.call()

javascript - 在 Javascript 中合并对象的 native 方法

javascript - 舍入值是否会加速 JSON 通信(ajax)?

javascript - 向浏览器扩展中的任何 url 发出网络请求

javascript - 如果复选框被选中,则只允许下一个复选框被选中

javascript - 对象、数组和 $.each()

php 从二维 session 数组中取消设置数组

javascript - Javascript 中的继承