gpt4 book ai didi

javascript - TypeError : object is not a function - Javascript, ExtJS、Jasmine 和 TypeError:将循环结构转换为 JSON

转载 作者:行者123 更新时间:2023-11-28 01:09:32 27 4
gpt4 key购买 nike

我对此很陌生(对于 Jasmine 测试、ExtJs 和 JS 来说确实很陌生),我必须修复这个错误/错误。我正在运行一些单元测试,但不断收到以下错误:

TypeError: object is not a function
TypeError: object is not a function
at eval (eval at <anonymous> (...main/lib/ext/ext-4.2.0-gpl/ext-all-debug.js:5499:56), <anonymous>:3:8)
at Object.Ext.ClassManager.instantiate (...main/lib/ext/ext-4.2.0-gpl/ext-all-debug.js:5471:53)
at Object.create (...main/lib/ext/ext-4.2.0-gpl/ext-all-debug.js:2110:39)
at Ext.define.urnSearchBasic (../../../../main/app/model/SecurityGatewayUrnSearchResponse.js:72:26)
at urnSearchBasic (...test/spec/model/SecurityGatewayUrnSearchResponseTest.js:68:27)
at null.<anonymous> (...test/spec/model/SecurityGatewayUrnSearchResponseTest.js:150:17)
at jasmine.Block.execute (...test/lib/jasmine/jasmine.js:1024:15)
at jasmine.Queue.next_ (...test/lib/jasmine/jasmine.js:2025:31)
at jasmine.Queue.start (...test/lib/jasmine/jasmine.js:1978:8)
at jasmine.Spec.execute (.../test/lib/jasmine/jasmine.js:2305:14)
timeout: timed out after 10000 msec waiting for passed === true

SecurityGatewanyUrnSeachResponse 的代码(仅发布第 61-84 行的部分代码)是:

61 urnSearchBasic: function (basic, config) {
config = Ext.apply({}, config);

var proxy = Deft.ioc.Injector.resolve('securityGatewayUrnMultiSearchProxy'),
urn = Ext.create('CAS.securityAdminUrnProv.model.Urn'),
formWriter,
createdProxy;
urn.data.urn = basic;
urn.data.pageNo = 0;
urn.data.pageSize = this.configData.getUrnPageSize();

72 formWriter = Ext.create('CAS.securityAdminUrnProv.model.SearchFormWriter');
formWriter.setUrn(urn.data);

createdProxy = Ext.create(proxy.$className);
createdProxy.url = createdProxy.url + '/basic';
createdProxy.setApiUrl(createdProxy.url);
createdProxy.headers = this.configData.getGatewayProxyHeaders();
createdProxy.setWriter(formWriter);

this.setProxy(createdProxy);

this.save(config);
84 },

第 72 行导致了该问题 (Ext.create(...SearchFormWriter)。SearchFormWirter 的代码如下:

Ext.define('CAS.securityAdminUrnProv.model.i SearchFormWriter', {
extend: "Ext.data.Writer",
alias: 'writer.SearchFormWriter',
inject: [ 'configData' ],
allowSingle: true,
config: {
urn: {}
},

writeRecords: function (request, data) {
var cache = [];
request.rawData = JSON.stringify(this.getUrn(), function(key, value) {
if (typeof value === 'object' && value !== null) {
if (cache.indexOf(value) !== -1) {
// Circular reference found, discard key
return;
}
// Store value in our collection
cache.push(value);
}
return value;
});
cache = null; // Enable garbage collection
return request;
}
});

writeRecords 函数导致“TypeError:将循环结构转换为 JSON”。当代码是:

writeRecords: function (request, data) {
request.rawData = JSON.stringify(this.getUrn());

return request;
}

按照网上的建议修改后,一直出现“TypeError: object is not a function”。大约有 23 个规范和 16 个因该错误而失败。如果你们能帮我解决这个问题,那就太好了。

非常感谢!很抱歉这篇文章很长...

最佳答案

据我所知,由于循环对象结构,您尝试序列化 this.getUrn() 函数结果的尝试失败了。这反过来会导致您的 Ext 对象定义失败,从而导致该对象不是函数错误。

编辑

要解决 Javascript 对象的循环结构,必须检查它是否具有类似于以下的特征:

var a = {};
a.b = a;

JSON.stringify() 无法处理诸如“a”之类的对象,因为它的子对象在某些时候引用其父对象。 this.getUrn() 的结果可能返回一个 Javascript 对象,其中子对象引用父对象,从而导致相关错误。

要纠正此问题,可以删除 this.getUrn() 函数返回的对象中的违规值或其属性。如果 this.getUrn() 从服务器返回值,那么根据您的用例,可能更需要在服务器端删除它们。

这有帮助吗?

关于javascript - TypeError : object is not a function - Javascript, ExtJS、Jasmine 和 TypeError:将循环结构转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24643556/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com