Jasmine中继承实例的属性中的javascript垃圾
我有一个问题,当使用Jasmine测试我的类时,继承类的一些属性会得到垃圾初始值,尽管我在父类中初始化了它们 准确地说:我有一个“类” 然后在另一个“类”中用作属性 当我实例化Tag类时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
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);
});
});