本文详细介绍JavaScript中Object.prototype.hasOwnProperty()方法的用法。该方法用于检测属性是否为对象自身的成员,而非从原型链继承。通过示例解析其语法、返回值及在自定义类型和内置对象中的应用,帮助开发者准确判断属性来源,避免原型链查找带来的误判。
hasOwnProperty() 方法概述
JavaScript 中的 hasOwnProperty() 是定义在 Object.prototype 上的原型方法,所有 Object 实例均继承此方法。
该方法用于判断指定属性是否为对象的自有属性(即直接存在于对象实例上),而非通过原型链继承所得。若属性属于对象自身,返回 true;否则返回 false。它不检查原型链,仅确认当前对象实例中是否存在该属性。
在自定义类型中,this.name 代表对象的自有属性,而定义在原型对象上的 name 属性则属于继承属性。
function F() { //自定义数据类型
this.name = "自有属性";
}
F.prototype.name = "继承属性";
语法与参数说明
hasOwnProperty() 的基本语法如下:
object.hasOwnProperty(propertyName);
参数 propertyName 指定需要检测的属性名称。
返回值类型为布尔值。若 propertyName 是对象的自有属性,返回 true;否则返回 false。
应用示例解析
示例1
基于上述自定义类型,可实例化对象并检测其 name 属性的归属类型。
var f = new F(); //实例化对象
console.log(f.hasOwnProperty("name")); //返回true,说明当前调用的 name是自有属性
console.log(f.name); //返回字符串“自有属性”
对于构造函数的原型属性(即原型对象包含的属性),hasOwnProperty() 检测时通常返回 false,因为它们属于继承属性。然而,从原型对象自身的角度来看,这些属性是其自有属性,因此对原型对象调用 hasOwnProperty() 会返回 true。
示例2
以下示例展示了 toString() 方法在 Date 对象中作为继承属性存在,但在 Date 构造函数的原型对象中则是其自有属性。
var d = Date;
console.log(d.hasOwnProperty("toString")); //返回false,说明toString()是Date的自有属性
var d = Date.prototype;
console.log(d.hasOwnProperty("toString")); //返回true,说明toString()是Date.prototype属性
hasOwnProperty() 仅能判断指定对象中是否包含指定名称的属性,无法检测对象原型链中的属性。因此,该方法能返回 true 的属性必须是对象的直接成员。
示例3
以下示例演示了 hasOwnProperty() 方法所能检测的属性范围。
var o = { //对象直接量
o1 : { //子对象直接量
o2 : { //孙子对象直接量
name : 1 //孙子对象直接量的属性
}
}
};
console.log(o.hasOwnProperty("o1")); //返回true,说明o1是o的自有属性
console.log(o.hasOwnProperty("o2")); //返回false,说明o2不是o的自有属性
console.log(o.o1.hasOwnProperty("o2")); //返回true,说明o2是o1的自有属性
console.log(o.o1.hasOwnProperty("name")); //返回false,说明name不是o1的自有属性
console.log(o.o1.hasOwnProperty("name")); //返回true,说明name不是o2的自有属性
本文介绍了 JS hasOwnProperty() 方法用于检测对象自有属性的用法。如需了解更多相关 JS hasOwnProperty 内容,请搜索本站历史文章或浏览后续文章,感谢支持!