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()
方法即可。我认为将数组封装到另一个对象中的唯一合法原因是,如果您确实想对其他代码隐藏数组方法,但情况似乎并非如此。