JavaScript isPrototypeOf和hasOwnProperty使用区别


1、isPrototypeOf

isPrototypeOf是用来检查传入的对象是否是另一个对象的原型,用于判断指定对象object2是否存在于另一个对象object1的原型链中,是则返回true,否则返回false。
格式如下:
object1.isPrototypeOf(object2);
object2是一个对象的实例;
object1是另一个将要检查其原型链的对象。
原型链可以用来在同一个对象类型的不同实例之间共享功能。
如果 object2 的原型链中包含object1,那么 isPrototypeOf 方法返回 true。
如果 object2 不是一个对象或者 object1 没有出现在 object2 中的原型链中,isPrototypeOf 方法将返回 false。
使用举例如下:
 

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


 2、hasOwnProperty


hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在对象的原型中)是否存在.其中,作为参数的属性(propertyName)必须以字符串形式指定(例如:o.hasOwnPropertyName(“name”)).

是用来判断一个对象是否有你给出名称的属性或对象。不过需要注意的是,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员。


如果该属性或者方法是该 对象自身定义的而不是器原型链中定义的 则返回true;否则返回false;
格式如下:
object.hasOwnProperty(proName);

判断proName的名称是不是object对象的一个属性或对象。使用举例如下

    // 得到false, 因为不能检测原型链中的属性   
    var bStr = "Test String".hasOwnProperty("split");   
    // String对象的原型上本来就有这个属性,自然返回true   
    var bStr1 = String.prototype.hasOwnProperty("split");   
    // 返回true,因为不是检测原型中的属性   
    var bObj = ({fnTest:function(){}}).hasOwnProperty("fnTest");   


   
下面看个isPrototypeOf和hasOwnProperty()组合使用的例子:

function Person(){}
Person.prototype.name='Nicholas';
Person.prototype.age=29;
Person.prototype.job='Software Engineer';
Person.prototype.sayName=function(){
	alert(this.name);
}
var person1=new Person();
person1.sayName();//"Nicholas"

var person2=new Person();
person2.name='Greg';
//person2的name被一个新值屏蔽了
person2.sayName();//'Greg'

alert(Person.prototype.isPrototypeOf(person1));//true
//虽然person2的name值被修改了,但其指向的原型链依然存在,故任为true
alert(Person.prototype.isPrototypeOf(person2));//true
delete person2.name; 
//用delete操作符删除了person2.name,就恢复了对原型中name的链接,所以又会恢复之前原型中的name值.
alert(person2.name);//'Nicholas'
//而使用hasOwnProperty()方法可以检测一个属性是存在于实例中,还是原型中,只有在给定属性存在于对象实例中,才会返回true.
alert(person1.hasOwnProperty('name'));//false
alert(person2.hasOwnProperty('name'));//false
person2.name='Greg';
alert(person2.hasOwnProperty('name'));//true


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值