检查Ember,js:获取对象的类型(Class)?

1u4esq0p  于 2022-10-20  发布在  其他
关注(0)|答案(5)|浏览(123)

我经常使用console.log(),尤其是与Ember.inspect()结合使用时。但有一件事我错过了:
如何找到对象(Class)的类型?
例如:在检查Ember.get("controller")时,会得到类似<Sandbox.ApplicationController:ember288>的东西吗?

iyfjxgzm

iyfjxgzm1#

如果只需要模型名称(例如app/models/comment.js具有模型名称comment),可以使用thing.constructor.modelName
例如:

var aComment = this.get('store').createRecord('comment');
aComment.get('constructor.modelName') // => 'comment'
mbjcgjjk

mbjcgjjk2#

我知道您正在寻找一个用于调试目的的字符串,但我最初提出这个问题是想知道如何获得对象的类型,而不是描述对象的字符串。
使用内置的Javascript属性构造函数将生成用于构造示例的类。例如,您可以执行以下操作:

person = App.Person.create();
person.constructor // returns App.Person
person.constructor.toString() // return "App.Person"
qzwqbdag

qzwqbdag3#

如果得到Class,通常可以调用toString()(或作为快捷方式连接空字符串+ '')以获得类似<Sandbox.ApplicationController:ember288>的内容

n8ghc7c1

n8ghc7c14#

另一个有用的特性(在chrome中)是dir命令。

dir(App.User)

这将为您提供完整的对象信息,而不仅仅是名称。

kninwzqo

kninwzqo5#

请注意,此处建议的一些答案仅适用于开发。一旦你的代码在生产中,大多数方法/类名将被缩小

import Model from '@ember-data/model';

export default class Animal extends Model {
  // ...
}

所以在开发中:

const model = this.store.createRecord('animal');
model.constructor.name // returns Animal

生产中:

const model = this.store.createRecord('animal');
model.constructor.name // returns 'i' (or any other single letter).

要避免这种情况,请使用constructor.toString()

const model = this.store.createRecord('animal');
model.constructor.toString() // returns 'model:animal'

相关问题