Brian F爱
从专注于角图,Web技术以yobet英雄联盟及波特兰的Node.js的Google开发人员专家中学习。
广告 ·ultimatecourses.com.
用终极课程学习角度正确的方式

javascript的hasownproperty()方法

学习javascript的学生提出的一个常见问题是:“什么是宗旨hasownproperty()方法?”

这是一个很好的问题。它可能会困惑为什么需要使用此方法,以及它所实际的方法。我们将查看该方法的方法,为什么需要使用它,以及避免使用它的方法是什么。

什么是hasownproperty()做?

对于此部分,您可能会发现跳转到Mozilla开发人员网络网站和查看文档。所以,这是什么hasownproperty()方法吗?简单地,它检查对象的属性是否属于指定对象,或者是继承的(通过原型链)。该方法由JavaScript定义窗口.Object.对象,因此它可用于JavaScript中的所有对象。几乎所有内容都是JavaScript中的对象(继承自Window.Object):

  • 常用表达
  • 阵列
  • 数字
  • 布尔基
  • 日期
  • 职能
  • 当然,对象

谁说javascript不是一种面向对象的语言?

为什么使用hasownproperty()

您需要使用的主要原因hasownproperty()是在JavaScript中使用for-in迭代循环。考虑以下示例:

var.=['bonnie''isaac'“布里奇特”'ted''Jamey'];对于var.{窗口警报'你好, '+;}

在上面的例子中,我是定义人的数组(这是一个对象),然后迭代每个人。您可能很容易忘记的是,我们可能拥有我们创建的其他代码,或者在我们的页面中包含的其他代码,它正在为数组对象添加属性。我们的in-in循环将迭代所有属性对象,无论是直接的解体阵列或继承的属性。指某东西的用途hasownproperty()防止循环枚举对象上的任何继承属性(在这种情况下,包含人员名称的字符串数组)。这被认为是在使用for-in循环的JS对象时被认为是最佳实践,因为您可以拥有作为您不想迭代的子对象的继承的成员。在使用基于原型的继承时,这很常见。

例如,假设您想要添加一个每()在JS中的所有数组中迭代辅助函数。这可能是一个常见的解决方案,即框架将实现,尽管它通常是可取的。但是,为了学习,让我们继续前进并做到这一点。查看下面的代码。

阵列原型=功能打回来{对于var.一世=0.;一世<这个长度;一世++打回来这个[一世];};var.=['bonnie''isaac'“布里奇特”'ted''Jamey'];对于var.{窗口警报'你好, '+[];}功能一世{窗口警报一世;};

在这里,我首先声明一个名为的新方法,添加到阵列通过它的对象原型目的。然后,我以前宣布了像人物的数组。接下来,我做了传统的循环没有检查结果hasownproperty()。您会注意到有第五个警报,这是“每个”属性(遇到函数)。最后,我正在使用我在全局上声明的每个函数阵列对象警告五个名称。

在这种情况下,in-in循环在语法上正确,但是当第六警报是一堆代码时,用户将非常困惑。为了防止这种情况,我们会添加支票hasownproperty()防止继承的“每个”属性显示给用户。

var.=['bonnie''isaac'“布里奇特”'ted''Jamey'];对于var.如果hasownproperty.{窗口警报'你好, '+[];}

如果您想更多地玩这个问题,我为此创建了一个fiddlerjs:http://jsfiddle.net/blode/zguwk/

避免hasownproperty()

这实际上非常简单:不要使用in-in iterator。使用Classic for Loop:

var.=['bonnie''isaac'“布里奇特”'ted''Jamey'];对于var.一世=0.;一世<长度;一世++{窗口警报'你好, '+[一世];}

这可能看起来有点工作,但它避免了通过在JavaScript中的数组上循环时使用进入的潜在错误。

Brian F爱

嗨,我是布莱恩。我对类型名称,Angular和node.js感兴趣我嫁给了我最好的朋友邦妮,我住在波特兰和我滑雪(很多)。