[英]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))
東西不會返回任何內容
var cir = new Circle();
var j = 0;
for(var i in cir) {
if (cir.hasOwnProperty(i)) {
j++;
}
}
j == 1; // true
你有幾個術語錯了。
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.