如何检查 JavaScript 对象是否直接是“{}”实例,而不是子类
How do you check if a JavaScript object is directly an `{}` instance, not a subclass?
在过去的一年里,我在这里和那里花了10或20分钟,大概有十几次,但从来没有找到这个问题的无懈可击的答案。
如何检查 JavaScript 对象是否是 Object
的实例,而不是子类?
一个用例是检查arguments[0]
是"选项"哈希还是"模型"(MVC),两者都扩展了本机Object
,但应该区别对待。
我试过这些:
// some helper to get constructor name
function klassName(fn) {
if (fn.__name__) {
return fn.__name__;
}
if (fn.name) {
return fn.name;
}
return fn.toString().match(/'W*function's+(['w'$]+)'(/));
};
var Model = function() {};
m = new Model;
o = {};
Object(o) === o; // true
Object(m) === m; // true, thought it might be false
klassName(o.constructor); // Object
klassName(m.constructor); // Model
该klassName(m.constructor)
在某些情况下不起作用(记不清了,但也许是正则表达式.constructor,类似的东西)。 也许是这样,不确定。
有没有一种防弹的方法可以判断某物是否是{}
物体?
可能像
function isObj( test ) {
return test.constructor === Object;
}
成为你要找的?
在 jsFiddle 中测试
你是说这个? http://jsfiddle.net/elclanrs/ukEEw/
var o = {};
var re = /'d/;
var f = function(){};
var d = new Date();
var isObj = function(e){
return e.toString() === '[object Object]';
};
console.log( isObj(o) ); // True
console.log( isObj(re) ); // False
console.log( isObj(f) ); // False
console.log( isObj(d) ); // False
我只会改变一件事
var isObj = function(e){
if(!e) return false; // change this line
return e.toString() === '[object Object]';
};
相关文章:
- 为什么无法在TypeScript中导出类实例
- 如何检查 JavaScript 对象是否直接是“{}”实例,而不是子类
- 在主类中分配类的实例并保留子类实例的上下文
- 为什么 Object#create 必须在子类的实例化之前
- RxJS 5子类Observable-静态方法返回父类的实例
- 用父属性实例化子类的Javascript
- Javavscript在实例化时更改子类属性
- Javascript:从返回超类实例的函数中设置子类原型的好处
- 为什么不't在babel节点下的Error子类实例上的工作实例
- 如何在JavaScript中进行继承,而不会在子类的所有实例之间共享父类的相同实例?
- 为什么基类的对象属性与子类的所有实例共享?
- JavaScript:从父类实例中创建子类
- 为什么原型继承子类是另一个子类的实例?
- 如何获取对象's类名,当它是子类的实例时
- 如何从子类访问超类实例变量
- 在ES6 / ES2015中容易实例化子类数组
- 如何选择类的每个实例的子类
- 我可以实例化一个超类,并根据提供的参数实例化一个特定的子类吗
- 适当地扩展数组,保持子类的实例
- 子类如何获得超类'实例变量