簡體   English   中英

如何在JavaScript中迭代Object原型的屬性?

[英]How do I iterate over the properties of an Object's prototype in JavaScript?

如果我有一個虛擬構造函數對象:

function Circle()
{
    this.radius = 3;
}

此對象的實例將具有單個“radius”屬性。 a)如何查詢構造函數對象的屬性數量?

b)我如何查詢Circle.prototype的屬性數量? 嘗試類似console.log(Object.getOwnPropertyNames(Circle.prototype))東西不會返回任何內容

hasOwnProperty

var cir = new Circle();
var j = 0;
for(var i in cir) {
    if (cir.hasOwnProperty(i)) {
        j++;
    }
}

j == 1; // true

你有幾個術語錯了。

  1. 您不“查詢構造函數對象”。 您可以枚舉實際對象的屬性,但不能枚舉構造函數。
  2. 您在代碼示例中創建屬性的方式是,您沒有使用對象的prototype因此如果您要迭代對象的原型,則不會看到radius屬性。

假設你真正想說的是:“我如何迭代我的Circle對象的實例的屬性?”,答案是這樣的:

function Circle()
{
    this.radius = 3;
    this.border = 1;
    this.color = "red";
}

var obj = new Circle();
for (var i in obj) {
    // hasOwnProperty makes sure we get properties only of Circle, 
    // not of ancestors like Object
    if (obj.hasOwnProperty(i)) {
        // i will be properties of obj on each iteration
        console.log(i);      // radius, border, color
    }
}

對象的原型是另一回事。 您可以將其視為對象的每個新實例自動繼承的結構。 您可以像這樣使用原型:

function Circle(r)
{
    this.radius = r;
    this.border = 1;
    this.color = "red";
}

Circle.prototype.calcArea = function() {
    return(Math.PI * this.radius * this.radius);
}

Circle.prototype.calcCircumference = function() {
    return(Math.PI * this.radius * 2);
}

這將自動給出Circle的每個實例,兩個方法calcArea和calcCircumference。

var cir = new Circle(4);
console.log(cir.calcArea());    // 54.624

您還可以將方法添加到您沒有代碼的預先存在的對象的原型中(例如,在執行此操作時必須小心)。 例如:

Array.prototype.isSorted = function() {
    for (var i = 1; i < this.length; i++) {
        if (this[i] < this[i-1]) {
            return(false);
        }
    }
    return(true);
}

var x = [1,3,6,8];
var y = [1,3,8,6];

console.log(x.isSorted());    // true
console.log(y.isSorted());    // false

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM