Javascript 如何销毁在此构造函数中创建的对象?
因此,我正在创建一个JavaScript类,它可以与我的Java类一起转移。这一切都完成了,但我想确保为参数输入正确的数据类型 例如,我的构造函数:Javascript 如何销毁在此构造函数中创建的对象?,javascript,oop,object,Javascript,Oop,Object,因此,我正在创建一个JavaScript类,它可以与我的Java类一起转移。这一切都完成了,但我想确保为参数输入正确的数据类型 例如,我的构造函数: function Table(header) { if (!Object.prototype.toString.call(header) === '[object Array]') { throw 'headers not array'; return; } for (var i = 0; i
function Table(header) {
if (!Object.prototype.toString.call(header) === '[object Array]') {
throw 'headers not array';
return;
}
for (var i = 0; i < header.length; i++) {
if (!typeof(header[i]) == 'string') {
throw 'headers['+i+'] not string';
return;
}
}
this.header = header;
this.rows = [];
}
函数表(标题){
如果(!Object.prototype.toString.call(标头)='[Object Array]'){
抛出“头不是数组”;
返回;
}
对于(变量i=0;i
创建新的表
对象时,必须传入一个数组。尽管您可以在此处传入任何内容,但对象仍然会被创建,只是没有标题
和行
字段
我怎样才能摧毁这个物体?我试图抛出的错误没有任何作用。您的第一个逻辑语句没有执行您认为正确的操作:
if (!Object.prototype.toString.call(header) === '[object Array]') {
代码>对调用结果而不是整个表达式进行操作。要么:
if (!(Object.prototype.toString.call(header) === '[object Array]')) {
或
这样会更好。(与第二个表达式相同。)
我个人倾向于后者
(实际上,我倾向于将此检查封装在一个或多个单独的方法中,以使其更易于测试,并使ctor更易于沟通。)您的代码中有两个错误
(一)
!Object.prototype.toString.call(header)
返回一个布尔值,因此它永远不会等同于[Object Array]
。这应该是:
Object.prototype.toString.call(header) !== '[object Array]'
typeof header[i] !== 'string'
(二)
同上。这应该是:
Object.prototype.toString.call(header) !== '[object Array]'
typeof header[i] !== 'string'
如果抛出错误,对象将不会被创建。我知道这并不能回答您的问题,但您可以执行数组头实例检查它是否是数组。为什么需要“销毁”它?Javascript使用自动垃圾收集,您不必手动销毁对象。当你停止引用对象时,它最终会消失。你所说的“你试图扔掉的错误什么都不做”是什么意思?我的意思是,GC在JS中“恰巧发生”,而从对象内部销毁对象似乎是矛盾的。如果要抛出异常,不妨抛出Error
对象:抛出新错误(“随便什么”)代码>我最终解决了这些问题。这是2年前的旧代码。他们为我当时所做的工作而工作。前者是我在旧代码中所做的。当我重新编写代码查看旧代码时,我省略了括号。没过多久,我就换了后者。
typeof header[i] !== 'string'