Val*_*nko 2 javascript iteration properties object
我有一个变量,当打印到控制台时,它看起来像这样:
Object { PK-34={...}, PK-35={...}}
Run Code Online (Sandbox Code Playgroud)
我正在为这个变量添加一个size方法:
Model_value.size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
Run Code Online (Sandbox Code Playgroud)
此方法返回0,并使用以下方法迭代这些属性:
for (foo in Model_value)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
不起作用.
我如何迭代那些PK-34,PK-35属性?
如果size最终为零,显然有问题的对象是从其原型继承这些属性.在这种情况下,这意味着你不想要hasOwnProperty支票.
例:
var Model_value = {};
Model_value.size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
Model_value.sizeInherited = function(obj) {
var size = 0, key;
for (key in obj) {
size++;
}
return size;
};
function Foo() {
}
Foo.prototype["PK-34"] = {
name: "I'm PK-34"
};
Foo.prototype["PK-35"] = {
name: "I'm PK-35"
};
display("Model_value.size(new Foo()) = " + Model_value.size(new Foo()));
display("Model_value.sizeInherited(new Foo()) = " + Model_value.sizeInherited(new Foo()));
var f = {
"PK-34": {name: "I'm PK-34"},
"PK-35": {name: "I'm PK-35"}
};
display("Model_value.size(f) = " + Model_value.size(f));
display("Model_value.sizeInherited(f) = " + Model_value.sizeInherited(f));
var bar = new Foo();
bar["PK-36"] = {name: "I'm PK-36"};
display("Model_value.size(bar) = " + Model_value.size(bar));
display("Model_value.sizeInherited(bar) = " + Model_value.sizeInherited(bar));
Run Code Online (Sandbox Code Playgroud)
在第一种情况(new Foo()),通过新创建的对象Foo不具有其自己的(不仅继承的)的特性,因此size最终被0而sizeInherited是2(因为它继承从其原型两个属性).
在第二种情况下,因为f有它自己 PK-34和PK-35性能,它size是2.它没有继承原型的属性,所以sizeInherited也是如此2.
在第三种情况下,bar同时具有2种继承性和自身的一个属性,所以size是3和sizeInherited是2.
更新:编辑似乎改变了一点问题.如果你想遍历性的 Model_value,那么你不想接受任何参数,你要使用this:
要查找它拥有的自有属性:
Model_value.size = function() {
var size = 0, key;
for (key in this) {
if (this.hasOwnProperty(key)) size++;
}
return size;
};
Run Code Online (Sandbox Code Playgroud)
要了解有多少属性总有(包括继承的):
Model_value.size = function() {
var size = 0, key;
for (key in this) {
size++;
}
return size;
};
Run Code Online (Sandbox Code Playgroud)
例:
function Model() {
}
Model.prototype["PK-34"] = {
name: "I'm PK-34"
};
Model.prototype["PK-35"] = {
name: "I'm PK-35"
};
var Model_value = new Model();
Model_value.size = function() {
var size = 0, key;
for (key in this) {
if (this.hasOwnProperty(key)) size++;
}
return size;
};
Model_value.sizeInherited = function() {
var size = 0, key;
for (key in this) {
size++;
}
return size;
};
display("Model_value.size() = " + Model_value.size());
// ^-- returns 2 ("size" and "sizeInherited")
display("Model_value.sizeInherited() = " + Model_value.sizeInherited());
// ^-- returns 4 ("PK-34", "PK-35", "size", and "sizeInherited")
Run Code Online (Sandbox Code Playgroud)
请注意,我们添加到的功能Model_value会分配给属性,因此它们会显示在总计中.
| 归档时间: |
|
| 查看次数: |
4586 次 |
| 最近记录: |