Appearance
cx
Appearance
对null,以及引用类型中的数组、日期、正则没有返回自己的具体类型。简单的记就是只可以返回基本类型(null除外),function以及Object(null返回的也是Object)
是用来判断 A 是否为 B 的实例,表达式为:A instanceof B。注意的是 instanceof 检测的是原型。instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型
;[] instanceof Object // true
;[] instanceof Array // true模拟实现一个instanceof
function instance_of(Case, Constructor) {
// 基本数据类型返回false
// 兼容一下函数对象
if ((typeof Case != 'object' && typeof Case != 'function') || Case == 'null')
return false
let CaseProto = Object.getPrototypeOf(Case)
while (true) {
// 查到原型链顶端,仍未查到,返回false
if (CaseProto == null) return false
// 找到相同的原型
if (CaseProto === Constructor.prototype) return true
CaseProto = Object.getPrototypeOf(CaseProto)
}
}可追溯的实例的构造器。
function F() {}
var f = new F()
// f.constructor === FtoString() 是 Object 的原型方法,调用该方法,默认返回当前对象的 [[Class]] 。这是一个内部属性,其格式为 [object Xxx] ,其中 Xxx 就是对象的类型。 对于 Object 对象,直接调用 toString() 就能返回 [object Object] 。而对于其他对象,则需要通过 call / apply 来调用才能返回正确的类型信息。
const typeofType = value => {
const callType = Object.prototype.toString.call(value)
return callType.slice(8, -1)
}