在JavaScript中,对象并没有像其他一些面向对象语言那样具有显式的“类”概念。但是,我们可以通过一些方法来获取对象的原型或者构造函数,从而间接地了解对象的“类”。
null
,形成了一条原型链。[[Constructor]]
,指向创建该对象的构造函数。constructor
属性你可以访问对象的constructor
属性来获取创建该对象的构造函数。
let obj = new Array();
console.log(obj.constructor); // 输出: [Function: Array]
Object.getPrototypeOf
方法这个方法可以获取对象的原型,然后通过原型的constructor
属性来获取构造函数。
let obj = new Array();
console.log(Object.getPrototypeOf(obj).constructor); // 输出: [Function: Array]
instanceof
操作符instanceof
操作符可以检查一个对象是否是某个构造函数的实例。
let obj = new Array();
console.log(obj instanceof Array); // 输出: true
constructor
属性被修改如果对象的constructor
属性被修改,那么通过该方法获取的构造函数可能不准确。
let obj = new Array();
obj.constructor = function() {};
console.log(obj.constructor); // 输出: [Function]
解决方法:使用Object.getPrototypeOf
方法结合constructor
属性来获取准确的构造函数。
在不同的窗口或框架中创建的对象,其原型链可能不同,导致instanceof
操作符失效。
let iframe = document.createElement('iframe');
document.body.appendChild(iframe);
let objInIframe = iframe.contentWindow.Array();
console.log(objInIframe instanceof Array); // 输出: false
解决方法:避免在不同窗口或框架中比较对象类型,或者使用更通用的方法(如检查对象的特定属性或方法)来判断其类型。