Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何销毁在此构造函数中创建的对象?_Javascript_Oop_Object - Fatal编程技术网

Javascript 如何销毁在此构造函数中创建的对象?

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

因此,我正在创建一个JavaScript类,它可以与我的Java类一起转移。这一切都完成了,但我想确保为参数输入正确的数据类型

例如,我的构造函数:

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'