删除变量的值而不丢失其子方法

时间:2012-03-08 22:19:35

标签: javascript parent

我正在尝试删除数组的值,没有删除其方法。请考虑以下代码:

var Project = function () {

    //The array where all data will be stored before they are sent..
    this.data = [];

    // ... Along with a function to send data to other source ...
    this.data.send = function () {
    }

    //Here is where the data would be altered ...

    //Send the data ...
    this.data.send();

    //Remove the data, we don't want it when sending the next time ...
    this.data = [];
    // ... but this (obviously) results in the removal of the send() function ... :-(
}

这也将删除函数.send(),这不是我正在寻找的行为。什么是最平滑,最恰当的方法来避免这个问题?谢谢!

3 个答案:

答案 0 :(得分:3)

Sirko的建议应该有效,但在我看来,你的问题指向设计缺陷。

为什么不公开像对象那样的数组,方法永远不会改变,但是有一个可以随意操作的内部数组。

var data = {
  items: [],
  push: function(item) {
    this.items.push(item);
  },
  send: function() {
    // send the items
    this.items = [];
  }
}

data.push('abc');
data.send();
console.log(data.items.length) // 0

让数组成为数组,并使用其他结构来操作它们。

答案 1 :(得分:2)

使用this.data = [];将旧数组对象替换为新数组,从而丢失所有附加函数。您必须修改现有对象以保留属性。例如,您可以使用splicedocu@MDN):

this.data.splice( 0, this.data.length );

另外,Elliot Bonneville建议您可以将长度设置为零(again@MDN

this.data.length = 0;

答案 2 :(得分:1)

你可以这样做:

this.data.length = 0;

然后,您现有的数组将为空,并保留所有其他属性。这是关于使用javascript数组的an interesting reference