JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
这两个属性都是Object.prototype所提供:Object.prototype.hasOwnProperty()和Object.prototype.isPropertyOf() 先讲解hasOwnProperty()方法和使用。在讲解isPropertyOf()方法和使用 看懂这些至少要懂原型链 一、Object.prototype.hasOwnProperty() 概述 hasOwnProperty()方法用来判断某个对象是否含有指定的自身属性 语法 obj.hasOwnProperty(“属性名”);//实例obj是否包含有圆括号中的属性,是则返回true,否则是fal JavaScript中的`hasOwnProperty()`和`isPrototypeOf()`方法是两种用于检查对象属性的重要工具,它们都是Object.prototype对象提供的方法。理解这两个方法有助于深入掌握JavaScript中的对象和原型链。 **一、Object.prototype.hasOwnProperty()** `hasOwnProperty()`方法用于确定一个对象是否包含指定的自身属性,而不是从原型链中继承的属性。其基本语法是`obj.hasOwnProperty("属性名")`,返回值为布尔类型,如果对象包含该属性,则返回`true`,否则返回`false`。 1. **示例1**: ```javascript var o = new Object(); o.prop = "exists"; function change() { o.newprop = o.prop; delete o.prop; } o.hasOwnProperty("prop"); // true change(); // 删除o的prop属性 o.hasOwnProperty("prop"); // false ``` 这个例子展示了`hasOwnProperty()`如何判断对象是否有特定的自身属性,以及删除属性后属性不再存在的情况。 2. **自身属性与继承属性的区别**: ```javascript o.hasOwnProperty("prop"); // true o.hasOwnProperty("toString"); // false o.hasOwnProperty("hasOwnProperty"); // false ``` 这里展示了`hasOwnProperty()`区分自身属性(如`prop`)和从原型链上继承的属性(如`toString`和`hasOwnProperty`)。 3. **修改原型链后的效果**: 当我们修改对象的原型链时,`hasOwnProperty()`的行为也会变化: ```javascript var o = {name: 'jim'}; function Person() { this.age = 19; } Person.prototype = o; var p = new Person(); p.hasOwnProperty("name"); // false p.hasOwnProperty("age"); // true ``` 在这种情况下,`name`属性虽然在原型链上,但`hasOwnProperty()`不会检测到。 4. **遍历对象的自身属性**: 使用`for...in`循环可以遍历对象的所有可枚举属性,包括继承属性,但如果我们只想获取对象的自身属性,可以结合`hasOwnProperty()`: ```javascript for (var k in p) { if (p.hasOwnProperty(k)) { console.log("自身属性:" + k); // 输出 name 和 age } else { console.log("继承别处的属性:" + k); // 输出 gender } } ``` 5. **`hasOwnProperty`方法可能被覆盖**: 如果对象定义了自己的`hasOwnProperty()`方法,它将覆盖原型链上的版本。此时,可以使用`call`或`apply`调用原型链上的`hasOwnProperty`: ```javascript var o = {gender: '男', hasOwnProperty: function() { return false; }}; o.hasOwnProperty("gender"); // 不论什么属性都返回false ({ }).hasOwnProperty.call(o, "gender"); // true Object.prototype.hasOwnProperty.call(o, "gender"); // true ``` **二、Object.prototype.isPrototypeOf()** `isPrototypeOf()`方法用于检查一个对象是否存在于另一个对象的原型链上。其语法为`object1.isPrototypeOf(object2)`,如果`object2`是`object1`的原型,即`object2`从`object1`继承,那么返回`true`,否则返回`false`。 1. **示例**: ```javascript function Animal() {} function Dog() {} Dog.prototype = new Animal(); var myDog = new Dog(); Animal.prototype.isPrototypeOf(Dog.prototype); // true Dog.prototype.isPrototypeOf(myDog); // true myDog.isPrototypeOf(Animal.prototype); // false ``` 这个例子展示了如何使用`isPrototypeOf()`来验证对象之间的原型关系。 `hasOwnProperty()`和`isPrototypeOf()`是JavaScript中理解对象和原型链的关键方法。它们可以帮助开发者更精确地控制和操作对象属性,确保代码的准确性和效率。同时,理解这两个方法对于解决继承和属性查找问题至关重要。
- 粉丝: 6
- 资源: 907
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0