当前位置: 代码迷 >> JavaScript >> 访问Js中的内部对象字段
  详细解决方案

访问Js中的内部对象字段

热度:38   发布时间:2023-06-05 11:58:31.0

有此代码

var a = {date : 12};
for(var t in a){
    alert(t);
}

我有一个日期属性警报。

但是在任何地方(即 ),我都需要编写:

for (var property in object) {
    if (object.hasOwnProperty(property)) {
        // do stuff
    }
}

那么,为什么我看不到对象的内部属性?

在JavaScript中,存在“原型链”(一种继承形式)。 如果您要添加属性的原型a ,然后添加您的date ,直接财产上a ,您for循环会发现这两个属性。

hasOwnProperty检查当前属性是否已直接附加到上下文对象,或者是否已通过原型链继承。

所以在我的例子,如果你已经添加了一个属性a的原型,该hasOwnProperty条件将返回false,你会不会‘做的东西’的程度。

for..in语法会迭代对象的每个属性,包括在原型链上找到的属性(如果它们是可枚举的) 。 通常这不是您想要的,因此通常建议使用hasOwnProperty检查。

在您的情况下,这是没有必要的,因为您的普通对象不会从Object原型(其原型链中唯一的东西)继承任何可枚举的属性

同样,for..in为您提供对象的属性名称 (键),如果您对该特定属性的值感兴趣,则必须使用方括号表示法,将示例扩展至此:

var a = {date : 12};
for(var t in a){
    alert(a[t]);
}

我想最好的方式是看一个例子:

Object.prototype.aBaseProperty = 123;

var childObject = { date: 12 };

for (var property in childObject) {
    console.log(property)
}

// output: date aBaseProperty


for (var property in childObject) {
    if (childObject.hasOwnProperty(property)) {
        console.log(property)
    }
}

// output:  date

另外,您可能希望不执行hasOwnProperty检查

Object.keys(object).forEach(function(value, key) { ... });

其中Object.keys将仅返回自己的属性。

  相关解决方案