我经常使用console.log()
,尤其是与Ember.inspect()
. 但我想念一件事:
如何找出对象(类)的类型?
例如:<Sandbox.ApplicationController:ember288>
在检查时得到类似的东西Ember.get("controller")
?
我经常使用console.log()
,尤其是与Ember.inspect()
. 但我想念一件事:
如何找出对象(类)的类型?
例如:<Sandbox.ApplicationController:ember288>
在检查时得到类似的东西Ember.get("controller")
?
如果您只想要型号名称(例如app/models/comment.js
具有型号名称comment
),您可以使用thing.constructor.modelName
.
例如:
var aComment = this.get('store').createRecord('comment');
aComment.get('constructor.modelName') // => 'comment'
我了解您正在寻找用于调试目的的字符串,但我最初来到这个问题是想具体了解如何获取对象的类型,而不是描述对象的字符串。
使用内置的 Javascript 属性构造函数将产生用于构造实例的类。例如你可以这样做:
person = App.Person.create();
person.constructor // returns App.Person
person.constructor.toString() // return "App.Person"
如果你得到Class
,你通常可以调用toString()
(或作为快捷方式连接一个空字符串+ ''
)来获得类似的东西<Sandbox.ApplicationController:ember288>
另一个有用的功能(在 chrome 中)是dir
命令。
dir(App.User)
这将为您提供完整的对象信息,而不仅仅是名称。
请注意,此处建议的其中一些答案仅适用于开发。一旦您的代码投入生产,这些方法/类名中的大部分都会被缩小。
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'