Javascript 删除变量';在不丢失其子对象的情况下实现s值的方法

Javascript 删除变量';在不丢失其子对象的情况下实现s值的方法,javascript,parent,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 () {

我试图删除数组的值,而不删除其方法。考虑下面的代码:

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()
,这不是我要寻找的行为。回避这个问题最顺利、最恰当的方法是什么?谢谢

this.data=[]用新的数组对象替换旧的数组对象,从而丢失所有附加的函数。必须修改现有对象才能保留属性。例如,您可以使用
拼接
():

或者,正如Elliot Bonneville所建议的,您可以将长度设置为零()


使用
this.data=[]用新的数组对象替换旧的数组对象,从而丢失所有附加的函数。必须修改现有对象才能保留属性。例如,您可以使用
拼接
():

或者,正如Elliot Bonneville所建议的,您可以将长度设置为零()

您只需执行以下操作:

this.data.length = 0;
然后,现有数组将为空,并保留所有其他属性。下面介绍如何使用javascript数组。

您只需执行以下操作:

this.data.length = 0;

然后,现有数组将为空,并保留所有其他属性。下面介绍如何使用javascript数组。

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

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

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

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

如果将数组的长度设置为零,会发生什么?这只是一个暗箱操作。你为什么要将函数存储在数组中?@Eduardo这是一个很好的问题。简单地说:我没有正确地思考。如果将数组的长度设置为零,会发生什么?这只是一个暗箱操作。你为什么要将函数存储在数组中?@Eduardo这是一个很好的问题。简单地说:我没有正确地思考。啊,太好了!我正在整理(仔细思考)一些可怕的解决方案,包括迭代所有属性。与滥用数组的可怕解决方案相反;是的。当我看到这个问题时,我的第一反应是一个健康的“wtf?”但它的诡计淹没了我的大脑,让我问Zar他为什么这么做:)。啊,太好了!我正在整理(仔细思考)一些可怕的解决方案,包括迭代所有属性。与滥用数组的可怕解决方案相反;是的。当我看到这个问题时,我的第一反应是一个健康的“wtf?”但它的诡计淹没了我的大脑,让我问Zar他到底为什么要这样做:)。这正是我想要的,我真的不知道为什么我从一开始就没有这样做,谢谢!我不清楚为什么数组需要包装在另一个对象中,而重新实现一系列数组方法。为什么?JS的灵活性意味着您不必重新安装
.push()
.length()
以及所有访问器。您只需将新方法添加到任何现有对象,保留它已有的所有方法。如果需要保留现有属性但清除数组的
.clear()
方法,只需添加一个
.clear()
方法即可。我认为将数组封装到另一个对象中的唯一合法原因是,如果您确实想对其他代码隐藏数组方法,但情况似乎并非如此。正是我想要的,我真的不知道为什么我从一开始就没有这样做,谢谢!我不清楚为什么数组需要包装在另一个对象中,而重新实现一系列数组方法。为什么?JS的灵活性意味着您不必重新安装
.push()
.length()
以及所有访问器。您只需将新方法添加到任何现有对象,保留它已有的所有方法。如果需要保留现有属性但清除数组的
.clear()
方法,只需添加一个
.clear()
方法即可。我认为将数组封装到另一个对象中的唯一合法原因是,如果您确实想对其他代码隐藏数组方法,但情况似乎并非如此。