js 如何访问父级对象 同级对象?

2025-05-13 18:23:01
推荐回答(4个)
回答(1):

/**
* 说明:通过 “父子树” 访问场景内的对象
* 操作:无,查看log信息
* 教程:ThingJS 教程——>园区与层级——>场景层级
* 难度:★★☆☆☆
*/
var app = new THING.App({
url: 'https://www.thingjs.com/static/models/storehouse'
});

// 加载场景后执行
app.on('load', function (ev) {
// 获取园区对象
var campus = ev.campus;

// 通过场景的 父子树 访问对象
var children = campus.children;
for (var i = 0; i < children.length; i++) {
var child = children[i];
var id = child.id;
var name = child.name;
var type = child.type;

console.log('id: ' + id + ' name: ' + name + ' type: ' + type);
}

// id 107 为白色厂区建筑,
// parent: app.query('107')[0] 为在厂区内创建物体
// 厂区内创建的物体,只有在进入厂区后才会能显示,点击厂区进入,则看到绿色小车
// 当推出厂区后,绿色小车则隐藏
var obj = app.create({
type: 'Thing',
id: 'No1234567',
name: 'truck',
parent: app.query('107')[0],
url: 'https://model.3dmomoda.com/models/8CF6171F7EE046968B16E10181E8D941/0/gltf/', // 模型地址
position: [0, 0, 0], // 世界坐标系下的位置
complete: function (ev) {
//物体创建成功以后执行函数
console.log('thing created: ' + ev.object.id);
}
});

var campus = ev.campus;
console.log('after load ' + campus.id);
// 切换层级到园区
app.level.change(campus);
});

回答(2):

我理解,楼主应该是在看别人写的代码吧,msg函数应该是在某个地方可以直接被调用,对象demo无法直接找到吧,这种情况以前遇到过,而且,看别人的代码,本身就是种折磨,给个建议,不要修改他的逻辑关系,直接给a对象,增加一个方法,return demo对象,在msg中调用这个方法,这样调用msg就可以过去demo对象了,然后想干啥都行了。

回答(3):

将父级当参数传进去
这样即使你是动态创建的,你也可以动态传入参数,就可以了

回答(4):

obj.a.msg.call(obj)
调用的时候用call改变this主体为obj就可以让msg内部this指向obj而不是 obj.a
如果希望msg函数内部this永远指向obj可以用bind强制绑定为obj