JavaScript中isPrototypeOf与hasOwnProperty的区别详解

作者:闭包旅人

时间:2026-10-24

浏览:88

本文详细解析JavaScript中isPrototypeOf和hasOwnProperty两个方法的区别。isPrototypeOf用于检测对象是否存在于另一对象的原型链中,而hasOwnProperty仅判断属性是否为对象自身成员,不检查原型链。通过具体代码示例说明两者的语法格式、返回值及实际应用场景,帮助开发者准确选择属性检测方式。

文章目录
1、isPrototypeOf

isPrototypeOf方法详解

isPrototypeOf方法用于检测指定对象object1是否存在于另一个对象object2的原型链中。若存在,则返回true;否则返回false。


其调用格式如下:


object1.isPrototypeOf(object2);


其中,object1是一个对象实例。


object2是另一个需要检查其原型链的对象。


原型链机制允许在相同对象类型的不同实例之间共享功能。


当object2的原型链中包含object1时,isPrototypeOf方法返回true。


若object2不是对象,或object1未出现在object2的原型链中,则isPrototypeOf方法返回false。


具体使用示例如下:


代码如下:

 
var re = /^\s*/;
// 这里定义一个正则表达式对象
// 这里检查RegExp是不是re的原形链对象,返回true
var bIsptt = RegExp.prototype.isPrototypeOf(re);

2、hasOwnProperty

hasOwnProperty方法详解

hasOwnProperty 用于检测对象自身是否拥有指定名称的属性或方法,无法检查原型链,属性必须是对象自身的成员。


若属性或方法由对象自身定义而非源自原型链,则返回 true;否则返回 false。


调用格式如下:


object.hasOwnProperty(proName);


用于判断 proName 是否为 object 对象的自身属性或方法。使用示例如下:


代码如下:

 
// 返回 false,因为无法检测原型链中的属性
var bStr = "Test String".hasOwnProperty("split");
// String 对象原型上已存在该属性,故返回 true
var bStr1 = String.prototype.hasOwnProperty("split");
// 返回 true,因为 fnTest 是对象自身的属性,非原型属性
var bObj = ({fnTest:function(){}}).hasOwnProperty("fnTest");

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章