instanceof() VS isPrototypeOf() hasOwnProperty() VS propertyIsEnumerable()

311 篇文章 3 订阅
160 篇文章 0 订阅
转自: http://www.2cto.com/kf/201404/291977.html
这几个方法在js的高级 编程 中经常用到,对于新手来说可能还不知道他们有什么区别,我把我的体会总结下来,供大家参考:
首先,定义一个对象:
 1  function Parent() {this.name = "wenbo";
 2  Parent.prototype.alertP = function() {
 3      alert("Parent");
 4  }
 5
 6  function Child() {this.age = 23;}
 7  Child.prototype.alertC = function() {
 8      alert("Child");
 9  }
10 
11  function F() {}
12  F.prototype = Parent.prototype;
13
14  // 改变Child函数原型指向一个 F 的实例
15  Child.prototype = new F();
16  Child.prototype.constructor = Child;
17
18  // 创建一个Child的实例
19  var child = new Child();

1、instanceof()   vs   isPrototypeOf():

instanceof:判断该对象是否为另一个对象的实例。  
1  console.log(child instanceof  Parent); //true  
2  console.log(child instanceof  Child); //true</span> </span>
isPrototypeOf:判断一个对象(或叫函数或类)是否为一个实例的原型。  
1 Parent.prototype.isPrototypeOf(child);//true
2 Child.prototype.isPrototypeOf(child);//true

2、hasOwnProperty()   vs  propertyIsEnumerable(): 

hasOwnProperty:判断对象是否有某个特定的属性,(注意说的是对象的属性,而不是对象原型的属性)必须用字符串指定该属性。
1 Parent.hasOwnProperty("name");//true
2 Child.hasOwnProperty("age");//true
3 Parent.hasOwnProperty("alertP");//false
4 Child.hasOwnProperty("alertC");//false
propertyIsEnumerable:判断给定的属性是否可以用 for...in 语句进行枚举。
由于 for ... in 枚举是包含原型链上的属性的,但propertyIsEnumerable作用于原型方法上时,始终是返回false的,
你可以这么认为,for...in可以枚举对象本身的属性和原型上的属性,而propertyIsEnumerable只能判断本身的属性是否可以枚举。
此外,预定义的属性不是可列举的,而用户定义的属性总是可列举的。所以如果你只想遍历对象本身的属性,可以:
 
1 for (var key in obj) {
2   if (obj.hasOwnProperty(key) {
3      //do something
4   }
5 }

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值