Javascript Qunit_initProperties不是一个函数
我在这里遇到了一些奇怪的行为,我想看看是否有人知道它为什么会发生。我编写了一个简单的Ember-QUnit测试,希望在每个测试之间共享一些数据,以减少混乱 试验 这里有几件事:Javascript Qunit_initProperties不是一个函数,javascript,ember.js,qunit,ember-qunit,Javascript,Ember.js,Qunit,Ember Qunit,我在这里遇到了一些奇怪的行为,我想看看是否有人知道它为什么会发生。我编写了一个简单的Ember-QUnit测试,希望在每个测试之间共享一些数据,以减少混乱 试验 这里有几件事: 我收到一个错误此错误。\ initProperties不是函数 当我删除共享内容时,错误就会消失 如果我在模块和测试之间添加共享内容,则错误仍然存在 我希望能够共享beforeach或全局中定义的变量 我尝试过在每个之前的中执行类似于让a=1的操作,但似乎无法在测试本身中引用它们 我注意到QUnit医生说他们已经
- 我收到一个错误
此错误。\ initProperties不是函数
- 当我删除共享内容时,错误就会消失
- 如果我在
模块和
测试之间添加共享内容,则错误仍然存在
- 我希望能够共享beforeach或全局中定义的变量
- 我尝试过在每个之前的
中执行类似于
让a=1的操作,但似乎无法在测试本身中引用它们
事实上,我认为这可能与全球变暖无关。我还添加了(以前未包括)
let create=Ember.Object.create
只是为了保存一些输入(并用调用create(Object)
包装了上述对象)。摆脱这个问题并使用长格式似乎可以摆脱这个错误,不过…问题的最后一部分是实际问题
当你这样做的时候
let create = Ember.Object.create
您可以从Ember.Object
中提取函数create
,并将其作为普通函数创建一个新的引用
根据JS绑定规则,当您将函数作为普通函数调用时,其中的将绑定到全局对象(或在严格模式下未定义的)。另一方面,当您将函数作为对象上的方法调用时(即直接在Ember.object
上调用它)将此
绑定到该对象
这就是为什么这个
在create
中没有定义,因此this.\u initProperties
不是一个函数
下面是正在发生的事情的演示:
//具有方法的对象
var obj={
getThis:function(){
归还这个;
}
};
//对该方法的摘录引用
var extractedGetThis=obj.getThis;
//这将绑定到对象
console.log(
obj.getThis()==obj//true
);
//这在全球范围内具有约束力
console.log(
extractedGetThis()==window//true
)
他们已经消除了全局变量,这意味着他们不再将变量放在窗口上了,你应该仍然能够像这样使用共享数据,我以前已经做过很多次了。你也可以在你的测试目录中创建另一个文件,并在其中存储可以在多个测试中共享的数据。你能展示一下函数是如何de>\u initProperties
被使用,它的定义在哪里?这是个问题,不是吗?它不是我的,我很难找到它。我猜它埋在Ember或QUnit源代码的深处。你可以显示错误stacktrace吗?你也应该删除所有内容,直到错误没有发生,然后慢慢地按lin添加行对罪犯做了很好的解释。非常感谢你的解释help@shane没问题,很高兴能帮上忙:)不管它值多少钱,这应该可以完成我想要的:let create=Ember.Object.create.bind(Ember.Object)
let create = Ember.Object.create