req.user.hails[0]
是类hails的一个实例,它有方法cancel()
我称之为:
req.user.hails[0].cancel()
我可以从该实例内部删除该项目吗?
cancel: function() {
//this will remove the item from a databae
this.destroy()
//Here I want to delete "this".
}
期望的结果是req.user.hails.length
比以前短一些。我知道我可以将它从我打电话取消的地方删除。
答案 0 :(得分:0)
不可以,除非cancel
关闭req
,req.user
或req.user.hails
,否则不会发生(不太可能)。 (即便如此,这将是一个非常狡猾的事情。)如果它没有提供给你的方法的信息,你可以用它来删除条目数组。
您可以向hails
添加一个方法,即取消和都会删除该条目:
req.user.hails.cancelEntry = function(index) {
this[index].cancel();
this.splice(index, 1);
};
是的,您确实可以将非索引属性添加到这样的数组中。请注意,它们是可枚举的,这是不使用for-in
循环遍历数组的一个原因。 (更多关于在this question中循环数组及其答案。)
你可以使它不可枚举:
Object.defineProperty(req.user.hails, "cancelEntry", {
value: function(index) {
this[index].cancel();
this.splice(index, 1);
}
});
在ES2015 +中,您甚至可以创建Array
的子类,其原型上有cancelEntry
...