美文网首页
js中hasOwnProperty,isPrototypeOf,

js中hasOwnProperty,isPrototypeOf,

作者: 一只大橘 | 来源:发表于2020-01-15 11:41 被阅读0次

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

    isPrototypeOf:是用来判断要检查其原型链的对象是否存在于指定对象实例中,是则返回true,否则返回false。

    instanceof() vs isPrototypeOf() hasOwnProperty() vs propertyIsEnumerable()

    这几个方法在js的高级编程中经常用到,对于新手来说可能还不知道他们有什么区别,我把我的体会总结下来,供大家参考:

    首先,定义一个对象:

      function Parent() {this.name = "wenbo";}
       Parent.prototype.alertP = function() {
          alert("Parent");
      }
     
     function Child() {this.age = 23;}
      Child.prototype.alertC = function() {
          alert("Child");
      }
    
      function F() {}
      F.prototype = Parent.prototype;
      Child.prototype = new F();
      Child.prototype.constructor = Child;
     var child = new Child();
    

    1,instanceof() vs isPrototypeOf():

    instanceof:判断该对象是否为另一个对象的实例。

    console.log(child instanceof  Parent); //true  
     console.log(child instanceof  Child); //true  
    

    isPrototypeOf:判断一个对象象是否为一个实例的原型。

     Parent.prototype.isPrototypeOf(child);//true
     Child.prototype.isPrototypeOf(child);//true
     hasOwnProperty()   vs  propertyIsEnumerable():
    

    hasOwnProperty:判断对象是否有某个特定的属性,(注意说的是对象的属性,而不是对象原型的属性)必须用字符串指定该属性。

     Parent.hasOwnProperty("name");//true
     Child.hasOwnProperty("age");//true
     Parent.hasOwnProperty("alertP");//false
     Child.hasOwnProperty("alertC");//false
    

    propertyIsEnumerable:判断给定的属性是否可以用 for...in 语句进行枚举。由于 for ... in 枚举是包含原型链上的属性的,但propertyIsEnumerable作用于原型方法上时,始终是返回false的,你可以这么认为,for...in可以枚举对象本身的属性和原型上的属性,而propertyIsEnumerable只能判断本身的属性是否可以枚举。此外,预定义的属性不是可列举的,而用户定义的属性总是可列举的。所以如果你只想遍历对象本身的属性,可以:

    for (var key in obj) {
       if (obj.hasOwnProperty(key) {
          //do something
       }
     }
    

    相关文章

      网友评论

          本文标题:js中hasOwnProperty,isPrototypeOf,

          本文链接:https://www.haomeiwen.com/subject/qjhtzctx.html