在我们的游戏需求里,可能会需要做一类操作,判断某个节点是否有某一类javascript脚本,然后进行执行相应的功能函数。
一、用javascript自带的一种判断方法
这种方法在任何javascript代码里都可以使用:
instanceof运算符
如果是普通的javascript代码,则示例如下:
function Cat(name){
Animal.call(this);
this.name = name || 'Tom';
}
(function(){
// 创建一个没有实例方法的类
var Super = function(){};
Super.prototype = Animal.prototype;
//将实例作为子类的原型
Cat.prototype = new Super();
})();
// Test Code
var cat = new Cat();
console.log(cat.name);
console.log(cat.sleep());
console.log(cat instanceof Animal); // true
console.log(cat instanceof Cat); //true
如果是CocosCreator的代码,则:
var ComponentBase = require("ComponentBase");
cc.Class({
extends: ComponentBase,
properties: {
},
start () {
console.log("111111", this instanceof ComponentBase);
},
});
二、这个是CocosCreator独有的,就是用getComponent("父类脚本名")
首先看我们的示例代码:
ComponentBase.js:
cc.Class({
extends: cc.Component,
properties: {
},
onCallback: function (params) {
console.log("vvv");
},
});
ComponentDerived1.js:
var ComponentBase = require("ComponentBase");
cc.Class({
extends: ComponentBase,
properties: {
},
start () {
console.log("111111", this instanceof ComponentBase);
console.log(this.getComponent("ComponentBase"));
},
onCallback: function (params) {
console.log("vvv1", "test1");
},
});
ComponentDrived2.js:
var ComponentBase = require("ComponentBase");
cc.Class({
extends: ComponentBase,
properties: {
},
start () {
console.log("2222", this instanceof ComponentBase);
console.log(this.getComponent("ComponentBase"));
},
onCallback: function (params) {
console.log("vvv2", "test2");
},
});
最后一个,判断是否继承了自定义类ComponentBase的ComponentManager.js:
cc.Class({
extends: cc.Component,
properties: {
},
start () {
var test = this.getComponents("ComponentBase")
console.log(test);
for(var key in test) {
test[key].onCallback();
}
},
});
再如下图绑定脚本:
运行,会在console上看到:
经过这一翻折腾之后,可以看出,我们的getComponents不只可以获取有相应文件名的脚本,还可以通过获取父类的文件名,获取到自己的脚本。
这样的话,就可以通过获取父类的主文件名来获取脚本,从而达到判断脚本是否具有某一类功能的目的。
最后,有一个小tips:
想一想,如果我们是getComponents("cc.Component"),这样就能直接获取该节点下的所有脚本啦。。