37

我经常使用console.log(),尤其是与Ember.inspect(). 但我想念一件事:

如何找出对象(类)的类型?

例如:<Sandbox.ApplicationController:ember288>在检查时得到类似的东西Ember.get("controller")

4

5 回答 5

77

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

例如:

var aComment = this.get('store').createRecord('comment');
aComment.get('constructor.modelName') // => 'comment'
于 2013-11-15T17:02:12.653 回答
24

我了解您正在寻找用于调试目的的字符串,但我最初来到这个问题是想具体了解如何获取对象的类型,而不是描述对象的字符串。

使用内置的 Javascript 属性构造函数将产生用于构造实例的类。例如你可以这样做:

person = App.Person.create();
person.constructor // returns App.Person
person.constructor.toString() // return "App.Person"
于 2013-04-26T05:01:10.623 回答
18

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

于 2012-11-04T17:23:07.390 回答
1

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

dir(App.User)

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

于 2013-05-22T11:15:13.467 回答
0

请注意,此处建议的其中一些答案仅适用于开发。一旦您的代码投入生产,这些方法/类名中的大部分都会被缩小

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'
于 2022-01-27T20:46:28.247 回答