我正在寫一個單元測試(在與Chai摩卡),看看有些對象,o
是instanceof
ClassY
。單元測試成功了,但是我可以讓它失敗,這取決於我如何創建對象字面值,儘管生成的對象字面值是相同的。對象字面值屬性賦值奇怪:這裏發生了什麼?
我知道這有點含糊。讓我再解釋一下。
ClassY
是對象的一部分,我們將其稱爲Parent
。這種關係簡單地看起來像這樣:
Parent: {
ClassY: function() {}
}
我附加Parent
到Backbone
使用下劃線延伸方法:
_.extend(Backbone, Parent)
這導致具有ClassY
屬性,其可以通過Backbone.ClassY
訪問骨幹。
我的單元測試是:
expect(o).to.be.instanceof(Backbone.ClassY);
,我知道一個事實,即o
是Backbone.ClassY
一個實例。
它通過如果我寫:
var Parent = {};
var ClassY = Parent.ClassY = function() {};
也
var Parent = {};
var ClassY = function() {};
Parent.ClassY = ClassY;
但單元測試時,我寫了下面的失敗:
var ClassY = function() {};
var Parent = {
ClassY: ClassY
};
原因失敗是:
TypeError: '[object Object]' is not a valid argument for 'instanceof'
(evaluating 'flag(this, 'object') instanceof constructor')
事實上,在Chrome DevTools檢查骨幹揭示了我失敗的情況下,ClassY
是一個對象。在成功的情況下,它是構造函數。
我想這是對象文字的一些簡單的屬性,逃避我。你知道這裏發生了什麼嗎?