【问题标题】:Add a method to Array object in Javascript?在 Javascript 中向 Array 对象添加方法?
【发布时间】:2017-03-03 18:06:02
【问题描述】:

是否可以在 javascript 中向 array() 添加方法? (我知道原型,但我不想为每个数组添加一个方法,特别是一个)。

我之所以要这样做是因为我有以下代码

function drawChart()
{
    //...
    return [list of important vars]
}

function updateChart(importantVars)
{
    //...
}

var importantVars = drawChart();

updateChart(importantVars);

而我希望能够做这样的事情:

var chart = drawChart();<br>
chart.redraw();

我希望有一种方法可以将方法附加到我在 drawChart() 中返回的内容。有什么办法吗?

【问题讨论】:

  • 这已经被多次回答了,但是,请记住这一点:JavaScript 中的方法是一流的 [function] 值。也就是说,它们是只是函数,由 - 即是评估的结果 - properties 命名。
  • 这显然是可能的,但它是否可取?有副作用吗?遍历数组时,方法会妨碍吗?获取 Array 的长度时该方法是否计入?

标签: javascript


【解决方案1】:

数组是对象,因此可以保存方法等属性:

var arr = [];
arr.methodName = function() { alert("Array method."); }

【讨论】:

【解决方案2】:

是的,很容易做到:

array = [];
array.foo = function(){console.log("in foo")}
array.foo();  //logs in foo

【讨论】:

  • 关于IE的评论是前几个版本的,现在还适用吗?
【解决方案3】:

只需实例化数组,创建一个新属性,并为该属性分配一个新的匿名函数。

var someArray = [];
var someArray.someMethod = function(){
    alert("Hello World!");
}

someArray.someMethod(); // should alert

【讨论】:

  • 在该函数中如何访问数组值?
【解决方案4】:
function drawChart(){
{
    //...
    var importantVars = [list of important variables];
    importantVars.redraw = function(){
        //Put code from updateChart function here using "this"
        //in place of importantVars
    }
    return importantVars;
}

这样做可以让您在收到该方法后直接访问该方法。

var chart = drawChart();
chart.redraw();

【讨论】:

  • 令人沮丧的是,这个答案没有得到更多的支持。这是唯一解决 OP 的问题:如何在返回结果中实际嵌入具有关联函数的数组 。 (碰巧,这正是我需要知道的。谢谢@Aust!)
  • 你能从那个函数内部访问和改变数组的值吗?
【解决方案5】:
var arr = [];
arr.methodName = function () {return 30;}
alert(arr.methodName);

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
猜你喜欢
  • 2023-03-10
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 2013-09-23
  • 2011-09-10
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
相关资源
最近更新 更多