定位了半天,总算发现了确定的原因。
状况: 在某Component子类中的getter方法中(或在getter中被调用到的方法中),设定一个默认值为null的成员变量(无论这个成员变量是否属于getter所属的这个类)指向某对象时,报错。
版本: 2.0.9p1MAC版 稳定复现
贴代码举例:
类一:
var bullet = require(‘bullet’)
cc.Class({
extends: cc.Component,
properties: {
aBullet : { get : function () { return bullet.createBullet(this); } } },});
类二:
var bullet = cc.Class({
properties: { owner : null, }, statics : { createBullet(owner){ var b = new bullet() b.owner = owner; return b; } }});
编辑器中hero.prefab文件上挂载了cc.Node, cc.Sprite和hero组件, 当打开hero.prefab时, 编辑器报错:
getComponent: Type must be non-nil
at Object.cc.errorID (/Applications/CocosCreator.app/Contents/Resources/engine/bin/.cache/dev/cocos2d/core/CCDebug.js:167:16)
at getConstructor (/Applications/CocosCreator.app/Contents/Resources/engine/bin/.cache/dev/cocos2d/core/utils/base-node.js:29:20)
at cc_Node.getComponent (/Applications/CocosCreator.app/Contents/Resources/engine/bin/.cache/dev/cocos2d/core/utils/base-node.js:399:35)
at HTMLElement.query-node-info (/Applications/CocosCreator.app/Contents/Resources/app.asar/editor/builtin/scene/panel/messages/scene-query.js:1:1331)
at Object.e._dispatch (/Applications/CocosCreator.app/Contents/Resources/app.asar/editor-framework/lib/renderer/panel.js:1:1941)
at EventEmitter.o.on.s (/Applications/CocosCreator.app/Contents/Resources/app.asar/editor-framework/lib/renderer/ipc.js:1:2917)
at emitMany (events.js:127:13)
at EventEmitter.emit (events.js:204:7)

