JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JS中的hasOwnProperty()和isPrototypeOf()属性实
例详解
这两个属性都是Object.prototype所提供:Object.prototype.hasOwnProperty()和Object.prototype.isPropertyOf()
先讲解hasOwnProperty()⽅法和使⽤。
在讲解isPropertyOf()⽅法和使⽤
看懂这些⾄少要懂原型链
⼀、Object.prototype.hasOwnProperty()
概述
hasOwnProperty()⽅法⽤来判断某个对象是否含有指定的⾃⾝属性
语法
obj.hasOwnProperty("属性名");//实例obj是否包含有圆括号中的属性,是则返回true,否则是false
描述
所有继承了Object.prototype的对象都会从原型链上继承到hasOwnProperty⽅法,这个⽅法检测⼀个对象是否包含⼀个特定的属性,和in不同,这个⽅法会忽略那些从原型链上继承的属性。
实例
1.使⽤hasOwnProperty()⽅法判断某对象是否含有特定的⾃⾝属性
下⾯的例⼦检测了对象 o 是否含有⾃⾝属性 prop:
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.⾃⾝属性和继承属性的区别
下⾯的列⼦演⽰了hasOwnProperty()⽅法对待⾃⾝属性和继承属性的区别。
var o =new Object();
o.prop="exists";
o.hasOwnProperty("prop");//true ⾃⾝的属性
o.hasOwnProperty("toString");//false 继承⾃Object原型上的⽅法
o.hasOwnProperty("hasOwnProperty");//false 继承⾃Object原型上的⽅法
3.修改原型链后hasOwnProperty()的指向例⼦
下⾯的列⼦演⽰了hasOwnProperty()⽅法对待修改原型链后继承属性的区别
var o={name:'jim'};
function Person(){
this.age=19;
}
Person.prototype=o;//修改Person的原型指向
p.hasOwnProperty("name");//false ⽆法判断继承的name属性
p.hasOwnProperty("age");//true;
4.使⽤hasOwnProperty()遍历⼀个对象⾃⾝的属性
下⾯的列⼦演⽰了如何在遍历⼀个对象忽略掉继承属性,⽽得到⾃⾝属性。
注意· forin 会遍历出对象继承中的可枚举属性
var o={
gender:'男'
}
function Person(){
="张三";
this.age=19;
}
Person.prototype=o;
var p =new Person();
for(var k in p){
if(p.hasOwnProperty(k)){
console.log("⾃⾝属性:"+k);// name ,age
}else{
console.log("继承别处的属性:"+k);// gender
}
}
5.hasOwnProperty⽅法有可能会被覆盖
如果⼀个对象上拥有⾃⼰的hasOwnProperty()⽅法,则原型链上的hasOwnProperty()的⽅法会被覆盖掉var o={
gender:'男',
hasOwnProperty:function(){
return false;
}
}
o.hasOwnProperty("gender");//不关写什么都会返回false
//解决⽅式,利⽤call⽅法
({}).hasOwnProperty.call(o,'gender');//true
Object.prototype.hasOwnProperty.call(o,'gender');//true
⼆、Object.prototype.isPrototypeOf()
概述
isPrototypeOf()⽅法测试⼀个对象是否存在另⼀个对象的原型链上
语法
//object1是不是Object2的原型,也就是说Object2是Object1的原型,,是则返回true,否则false
object1.isPrototypeOf(Object2);
描述
isPrototypeOf()⽅法允许你检查⼀个对像是否存在另⼀个对象的原型链上
实例
1.利⽤isPrototypeOf()检查⼀个对象是否存在另⼀个对象的原型上
var o={};
function Person(){};
var p1 =new Person();//继承⾃原来的原型,但是现在已经⽆法访问
Person.prototype=o;
var p2 =new Person();//继承⾃o
console.log(o.isPrototypeOf(p1));//false o是不是p1的原型
console.log(o.isPrototypeof(p2));//true o是不是p2的原型
2.利⽤isPropertyOf()检查⼀个对象是否存在⼀另⼀个对象的原型链上
var o={};
function Person(){};
var p1 =new Person();//继承⾃原来的原型,但是现在已经⽆法访问
Person.prototype=o;
var p2 =new Person();//继承⾃o
console.log(o.isPrototypeOf(p1));//false o是不是p1的原型
console.log(o.isPrototypeof(p2));//true o是不是p2的原型
console.log(Object.prototype.isPrototypeOf(p1));//true
console.log(Object.prototype.isPrototypeOf(p2));//true
p1的原型链结构是p1=>原来的Person.prototype=>Object.prototype=>null
p2的原型链结构是p2=> o =>Object.prototype=>null
p1和p2都拥有Object.prototype所以他们都在Object.Prototype的原型链上
三、总结
1.hasOwnProperty:是⽤来判断⼀个对象是否有你给出名称的属性或对象。
不过需要注意的是,此⽅法⽆法检查该对象的原型链中是否具有该属性,该属性必须是对象本⾝的⼀个成员。
2.isPrototypeOf是⽤来判断要检查其原型链的对象是否存在于指定对象实例中,是则返回true,否则返回false。
以上所述是⼩编给⼤家介绍的JS中的hasOwnProperty()和isPrototypeOf()属性实例详解,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。
在此也⾮常感谢⼤家对⽹站的⽀持!。