Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.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
Jasmine中继承实例的属性中的javascript垃圾_Javascript_Inheritance_Jasmine_Garbage - Fatal编程技术网

Jasmine中继承实例的属性中的javascript垃圾

Jasmine中继承实例的属性中的javascript垃圾,javascript,inheritance,jasmine,garbage,Javascript,Inheritance,Jasmine,Garbage,我有一个问题,当使用Jasmine测试我的类时,继承类的一些属性会得到垃圾初始值,尽管我在父类中初始化了它们 准确地说:我有一个“类” 然后在另一个“类”中用作属性 当我实例化Tag类时 var tag = new Tag(); 一切正常,tag.attr属性中没有垃圾。 然后我创建一个子类 function Div(){ ... } Div.prototype = new Tag(); 问题就出现在这里:在浏览器中,当我实例化Div类时,我看到了这一点 var div = new

我有一个问题,当使用Jasmine测试我的类时,继承类的一些属性会得到垃圾初始值,尽管我在父类中初始化了它们

准确地说:我有一个“类”

然后在另一个“类”中用作属性

当我实例化Tag类时

var tag = new Tag();
一切正常,tag.attr属性中没有垃圾。 然后我创建一个子类

function Div(){
    ...
}
Div.prototype = new Tag();
问题就出现在这里:在浏览器中,当我实例化Div类时,我看到了这一点

var div = new Div();
其div.attr属性(从标记继承)具有预期值。但是Jasmine中的相同代码生成div.attr中包含垃圾值。请注意,属性类没有未初始化的属性。它可能是什么?如何摆脱它?目前,我必须包括this.attr=newattributes()也在Div类中,但这种方法破坏了继承的概念

附加信息。正如前面提到的,在浏览器中,代码工作得非常好。问题出现在茉莉花上。例如,这个TDD代码

describe('inherited objects should have proper values', function(){
    it('creates odd objects', function(){
        var attr = new Attributes(),
            tag = new Tag(),
            div = new Div();
        expect(attr.width).toBe(undefined);
        expect(tag.attr.width).toBe(undefined);
        expect(div.attr.width).toBe(undefined);
    });
});
仅在最后一次预期时产生错误:

预计15个未定义


而其他人都在完美地通过。

可能的重复我怀疑这是重复。在我的例子中,继承不是从与您提到的示例中相同的实例执行的结构是问题的根源-所有div只共享一个属性,该属性在实例之前初始化。或者“垃圾值”到底是什么?垃圾值不是人们强加的值,而是一些看似任意的值。请注意,在浏览器中,它工作得非常好,只有在Jasmine中,它给出了这个问题。经过长时间的分析,你的第一个评论是正确的。在jasmine中,每个更改(如div.attr.width=1)都会在属性原型中传播。这意味着通过Div.prototype=new Tag()进行继承;是错误的,应该像你在回答中指出的那样:Tag.call(this);和Div.prototype=Object.create(Tag.prototype)。谢谢
var div = new Div();
describe('inherited objects should have proper values', function(){
    it('creates odd objects', function(){
        var attr = new Attributes(),
            tag = new Tag(),
            div = new Div();
        expect(attr.width).toBe(undefined);
        expect(tag.attr.width).toBe(undefined);
        expect(div.attr.width).toBe(undefined);
    });
});