我经常使用console.log(),尤其是与Ember.inspect()结合使用时。但有一件事我错过了:如何找到对象(Class)的类型?例如:在检查Ember.get("controller")时,会得到类似<Sandbox.ApplicationController:ember288>的东西吗?
console.log()
Ember.inspect()
Ember.get("controller")
<Sandbox.ApplicationController:ember288>
iyfjxgzm1#
如果只需要模型名称(例如app/models/comment.js具有模型名称comment),可以使用thing.constructor.modelName。例如:
app/models/comment.js
comment
thing.constructor.modelName
var aComment = this.get('store').createRecord('comment'); aComment.get('constructor.modelName') // => 'comment'
mbjcgjjk2#
我知道您正在寻找一个用于调试目的的字符串,但我最初提出这个问题是想知道如何获得对象的类型,而不是描述对象的字符串。使用内置的Javascript属性构造函数将生成用于构造示例的类。例如,您可以执行以下操作:
person = App.Person.create(); person.constructor // returns App.Person person.constructor.toString() // return "App.Person"
qzwqbdag3#
如果得到Class,通常可以调用toString()(或作为快捷方式连接空字符串+ '')以获得类似<Sandbox.ApplicationController:ember288>的内容
Class
toString()
+ ''
n8ghc7c14#
另一个有用的特性(在chrome中)是dir命令。
dir
dir(App.User)
这将为您提供完整的对象信息,而不仅仅是名称。
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()
constructor.toString()
const model = this.store.createRecord('animal'); model.constructor.toString() // returns 'model:animal'
5条答案
按热度按时间iyfjxgzm1#
如果只需要模型名称(例如
app/models/comment.js
具有模型名称comment
),可以使用thing.constructor.modelName
。例如:
mbjcgjjk2#
我知道您正在寻找一个用于调试目的的字符串,但我最初提出这个问题是想知道如何获得对象的类型,而不是描述对象的字符串。
使用内置的Javascript属性构造函数将生成用于构造示例的类。例如,您可以执行以下操作:
qzwqbdag3#
如果得到
Class
,通常可以调用toString()
(或作为快捷方式连接空字符串+ ''
)以获得类似<Sandbox.ApplicationController:ember288>
的内容n8ghc7c14#
另一个有用的特性(在chrome中)是
dir
命令。这将为您提供完整的对象信息,而不仅仅是名称。
kninwzqo5#
请注意,此处建议的一些答案仅适用于开发。一旦你的代码在生产中,大多数方法/类名将被缩小。
所以在开发中:
在生产中:
要避免这种情况,请使用
constructor.toString()