hasOwnProperty()、propertyIs Enumerable()とisPrototypeOf()の使い方

4597 ワード

javascriptにはプロトタイプという概念があります.どのコンストラクションにも対応するプロトタイプがあります.
function Gadget(name, color){
    this.name = name;
    this.color = color;
    this.whatAreYou = function(){
        return 'I am a ' + this.color + ' ' + this.name;
    }
}

Gadget.prototype.price = 100;
Gadget.prototype.rating = 3;
Gadget.prototype.getInfo = function(){
    return 'Rating: ' + this.rating + ', price: ' + this.price;
  };


var newtoy = new Gadget('webcam', 'black');
ここではGadgetクラスの例であるnewtoyオブジェクトを定義した.このオブジェクトでは、オブジェクト内部およびそのプロトタイプオブジェクトの属性または方法にアクセスできます. あるオブジェクトのすべての属性のリストを取得するには、for-i-nサイクルを使用できます.
for i in newtoy{
    console.log(i + ' = ' + newtoy[i]);
}
次のような結果が得られます.
name = webcam
color = black

whatAreYou = function (){
        return 'I am a ' + this.color + ' ' + this.name;
    }

price = 100
rating = 3

getInfo = function (){
    return 'Rating: ' + this.rating + ', price: ' + this.price;
  }
この時、原型の中の属性をフィルタリングしたいなら、まずハスOwnProperty()を使って該当属性が対象内かどうかを判断することができます.
for(var i in newtoy){
    if(newtoy.hasOwnProperty(i))
        console.log(i + ' = ' + newtoy[i]);
}
また注意すべき点は:
  • 列挙可能な属性だけが表示されます.
  • プロトタイプのそれぞれのプロトタイプの属性も表示されます.もちろん、それらは列挙可能な
  • です.
  • propertyIsEnumerableは、この属性が列挙可能かどうかをテストするために使用され、そのためのプロトタイプ属性については、propertyIs Enumerableは、for-innサイクルで列挙可能な属性を含むfalseに戻ります.ただし、プロpertyIs Enumerableの呼び出しがプロトタイプチェーン上のあるオブジェクトからのものであれば、そのオブジェクトの属性は列挙可能である.例えば、newtoy.co nstructor.prototype.propertyIsNumerable; //戻る:ture
  • オブジェクトごとにisPrototypeOf()の方法がありますが、この方法は現在のオブジェクトが別のオブジェクトの原型かどうかを教えてくれます.
    var monkey = {
        hair: true,
        feeds: 'bananas'
    };
    
    function Human(name){
        this.name = name;
    }
    Human.prototype = monkey;
    
    var tom = new Human("Tom");
    monkey.isPrototypeOf(tom);
    //戻る:true 
     
     
    転載先:https://www.cnblogs.com/MockingBirdHome/p/3467995.html