如果我从中执行此操作的函数是实例的类派生的基类,如何找出在Python中创建对象实例的类的名称?
想到也许检查模块可能在这里帮助了我,但它似乎没有给我我想要的东西.如果没有解析__class__成员,我不知道如何获取这些信息.
以下哪项更好?
a instanceof B
Run Code Online (Sandbox Code Playgroud)
要么
B.class.isAssignableFrom(a.getClass())
Run Code Online (Sandbox Code Playgroud)
我所知道的唯一区别是,当'a'为null时,第一个返回false,而第二个抛出异常.除此之外,他们总是给出相同的结果吗?
在我的特殊情况下:
callback instanceof Function
Run Code Online (Sandbox Code Playgroud)
要么
typeof callback == "function"
Run Code Online (Sandbox Code Playgroud)
甚至重要,有什么区别?
额外资源:
JavaScript-Garden typeof vs instanceof
instanceofJavaScript中的关键字在第一次遇到时会非常混乱,因为人们倾向于认为JavaScript不是面向对象的编程语言.
我正在开发一个应用程序,一种设计方法涉及对instanceof操作员的极大使用.虽然我知道OO设计通常会试图避免使用instanceof,但这是一个不同的故事,这个问题纯粹与性能有关.我想知道是否有任何性能影响?是这么快==吗?
例如,我有一个包含10个子类的基类.在一个获取基类的函数中,我会检查该类是否是子类的实例并执行一些例程.
我想解决它的另一种方法是使用"type id"整数原语,并使用位掩码来表示子类的类别,然后只需对子类"type id"进行掩码比较.表示类别的常量掩码.
被instanceof莫名其妙地由JVM优化得比较快?我想坚持使用Java,但应用程序的性能至关重要.如果之前一直走在这条路上的人可以提供一些建议,那将会很酷.我是在挑剔太多还是专注于错误的事情来优化?
我了解到Java有instanceof运营商.你能详细说明它的使用地点和优势吗?
"foo" instanceof String //=> false
"foo" instanceof Object //=> false
true instanceof Boolean //=> false
true instanceof Object //=> false
false instanceof Boolean //=> false
false instanceof Object //=> false
// the tests against Object really don't make sense
Run Code Online (Sandbox Code Playgroud)
数组文字和对象文字匹配......
[0,1] instanceof Array //=> true
{0:1} instanceof Object //=> true
Run Code Online (Sandbox Code Playgroud)
为什么不是所有人呢?或者,他们为什么不呢?
而且,它们是什么样的呢?
在FF3,IE7,Opera和Chrome中也是如此.所以,至少它是一致的.
错过了一些.
12.21 instanceof Number //=> false
/foo/ instanceof RegExp //=> true
Run Code Online (Sandbox Code Playgroud) 我有一个使用switch case for instanceofobject的问题:
例如:我的问题可以用Java重现:
if(this instanceof A)
doA();
else if(this instanceof B)
doB();
else if(this instanceof C)
doC():
Run Code Online (Sandbox Code Playgroud)
如何使用switch...case?
这是一个非常基本的问题,只是为了满足我的好奇心,但有没有办法做这样的事情:
if(obj !instanceof Array) {
//The object is not an instance of Array
} else {
//The object is an instance of Array
}
Run Code Online (Sandbox Code Playgroud)
这里的关键是能够使用NOT!在实例面前.通常我必须设置它的方式是这样的:
if(obj instanceof Array) {
//Do nothing here
} else {
//The object is not an instance of Array
//Perform actions!
}
Run Code Online (Sandbox Code Playgroud)
当我只想知道对象是否是特定类型时,必须创建一个else语句有点烦人.
我正在使用Eclipse生成.equals()和.hashCode(),并且有一个选项标记为"使用'instanceof'来比较类型".默认情况下,此选项可以取消选中并用于.getClass()比较类型.有什么理由我应该喜欢.getClass()过instanceof?
不使用instanceof:
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Run Code Online (Sandbox Code Playgroud)
使用instanceof:
if (obj == null)
return false;
if (!(obj instanceof MyClass))
return false;
Run Code Online (Sandbox Code Playgroud)
我通常检查instanceof选项,然后进入并删除" if (obj == null)"检查.(这是多余的,因为空对象总是会失败instanceof.)有什么理由不好吗?
instanceof ×10
java ×5
javascript ×4
operators ×2
eclipse ×1
equals ×1
literals ×1
performance ×1
python ×1
reflection ×1
typeof ×1